我从我的 mac 创建了一个到我的远程服务器的无密码 ssh 连接。它有效(!)然后我关闭了我的终端,重新打开它,再试一次,并得到以下(用户名,my_ip 不是真实的):
ssh -vvv username@my_ip
OpenSSH_7.2p2, LibreSSL 2.4.1
debug1: Reading configuration data /Users/Me/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug1: /etc/ssh/ssh_config line 53: Applying options for *
debug2: resolving "my_ip" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to my_ip [my_ip] port 22.
debug1: Connection established.
debug1: identity file /Users/Me/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/Me/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such …Run Code Online (Sandbox Code Playgroud) 我想安装一个旧版本的package <x>,当我使用dnf它时只显示当前版本的package <x>.
有没有办法安装旧版本dnf?
假设用户/bin/bash在/etc/passwd. 然后ssh user@host command使用 Bash 运行命令。但是,该 shell 既不是登录也不是交互式的,这意味着既不是~/.bash_profile也不~/.bashrc是来源。在这种情况下如何设置PATH环境变量以便可以找到并执行可执行文件?是否建议在实际命令前加上source ~/.bashrc?
我正在使用xargs选项--max-args=0(或者-P 0)。
然而,进程的输出被合并到stdout流中而不考虑适当的行分离。所以我经常会以这样的行结束:
<start-of-line-1><line-2><end-of-line-1>
Run Code Online (Sandbox Code Playgroud)
当我在整个输出的模式中使用egrepwith 时^,xargs这弄乱了我的结果。
有没有办法强制xargs按顺序写入进程输出(任何顺序,只要一个进程的输出是连续的)?
或者其他一些解决方案?
编辑:有关用例的更多详细信息:
我想从不同的主机下载和解析网页。由于每个页面都需要大约一秒钟的时间来加载,并且有几十个页面我想并行化请求。
我的命令具有以下形式:
echo -n $IPs | xargs --max-args=1 -I {} --delimiter ' ' --max-procs=0 \
wget -q -O- http://{}/somepage.html | egrep --count '^string'
Run Code Online (Sandbox Code Playgroud)
我使用 bash 而不是 Perl 之类的东西,因为主机 IP($IPs 变量)和其他一些数据来自包含的 bash 文件。
所以 ssh 有选项HostKeyAlgorithms。示例用法:
ssh -o "HostKeyAlgorithms ssh-rsa" user@hostname
Run Code Online (Sandbox Code Playgroud)
我试图让客户端使用服务器ecdsa密钥进行连接,但我找不到正确的字符串。
我可以使用什么命令来获取可用的列表HostKeyAlgorithms?
我突然决定要查看“回声”的源代码
$ which echo
/usr/bin/echo
Run Code Online (Sandbox Code Playgroud)
所以
$ ls -al /usr/bin/echo
-rwxr-xr-x. 1 root root 32536 Oct 31 2016 /usr/bin/echo
Run Code Online (Sandbox Code Playgroud)
所以
$strings /usr/bin/echo
Run Code Online (Sandbox Code Playgroud)
让我相信这是一个编译的 C 程序
现在我被困住了。
我如何能:
找出它在哪个包中
获取源码
重建它
测试一下
在系统范围内安装新版本
(我知道 5 不是一个好主意,我只是好奇……)
我目前在 Fedora 上,但我也对 Debian 的答案感兴趣
相关教程的链接将是一个很好的答案。
编辑:
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
Run Code Online (Sandbox Code Playgroud)
所以我想这是/usr/bin/echo我想看的而不是试图阅读整个bash.
我之前安装了一个带有 的包,--no-install-recommends现在由于缺少这些包而缺少一些功能。有没有办法在apt-get不完全卸载的情况下使用命令安装这些包(因为这也会删除过多的依赖包)?
我知道我可以apt-cache depends *packagename* | grep Recommends用来获取这些包的列表,然后我可以手动安装并手动设置为自动安装。但是我想知道您是否可以使用 apt-get 自动执行此操作。
我想使用钥匙串来管理 SSH 密钥的密码提示,但它应该 1) 仅在我实际使用密钥时询问它,并且 2) 之后将其保存一段时间。目前我有2个选择:
$ eval `keychain --eval --agents ssh id_rsa` -- 这将始终在启动时要求密码短语,但随后会保存它。$ eval `keychain --eval --noask --agents ssh id_rsa` - 启动时不会要求任何东西,但每次我使用该密钥时都会要求输入密码。有什么方法可以结合这些方法的优点吗?
我ssh -Y ...从一台机器(=客户端)连接(通过)到另一台机器(=服务器,实际上在我的局域网中,但它无关紧要);然后我在服务器上启动一个新的网络命名空间(简称 NNS),我启动一个 xterm(来自默认命名空间),它完美地显示在我的客户端上,最后,从 xterm 中,我加入了非默认 NNS ,
ip netns exec NNSName bash
Run Code Online (Sandbox Code Playgroud)
我可以检查我是否在新的 NNS 中,
ip netns identify $$
Run Code Online (Sandbox Code Playgroud)
我可以在新的 NNS 中运行复杂的程序,例如 OpenVPN。
问题就在这里:我想xeyes从新的 NNS 中启动一个图形应用程序(即使只是暂时),但我不能,我总是被告知:Unable to open DISPLAY=...
诚然,我只尝试了显而易见的:
DISPLAY=:0.0
DISPLAY=:10.0
DISPLAY=localhost:10.0
DISPLAY=localhost:20.0
DISPLAY=ClientName:10.0
DISPLAY=ClientIPAddress:10.0
Run Code Online (Sandbox Code Playgroud)
始终xhost +在客户端上,用于纯调试目的。
我没有问题:
通过ssh -Y ....从客户端连接到服务器,xeyes在服务器上运行并在客户端上显示它;
在服务器上启动一个新的 NNS,并在 NNS 中启动要显示在服务器上的图形应用程序(即,在这种情况下忘记客户端)。
当我将这两个东西(ssh 和命名空间)放在一起时,我无法在服务器的新 NNS 中运行的客户端应用程序上显示。
看起来标准的 TCP 端口 6010 属于默认 NNS 的 ssh 会话,而新的 NNS 应该有自己的。我当然可以在新的 NNS 中启动一个 ssh 服务器并直接从客户端连接到服务器的新 …