为什么我无法通过 `ssh` 进行 `diff`?

为什么我无法通过 `ssh` 进行 `diff`?

问题

下列的这个帖子我尝试使用diffbashssh进程替换

 diff foo <(ssh myServer 'cat foo')

当我输入以下命令时

diff /Volumes/MyBook/Remi/SimulationsOutputs/Hermes/C_no_F/C_no_F_allele_005.txt  <(ssh [email protected] 'cat /home/matthey/scratch/Plasticity/outputs/C_no_F/C_no_F_allele_005.txt')

,系统会按照以下提示要求我输入密码(正如预期的那样)

[email protected]'s password:

但无论我写什么都会显示在下一行!如果我按回车键,则什么也不会发生。

附加信息

diff比较本地文件时似乎工作正常

ssh看起来不错

经过 25 次仔细检查后,我可以说这些文件存在,而且我知道密码!

我使用的是 Mac OSX 10.11.2

答案1

您需要做的就是在您的 PC 上生成私钥/公钥对,将公钥复制到服务器,然后连接。这可以通过ssh-keygen -t rsa在本地机器上运行来完成。输出将类似于以下内容:

td512@kettecomp2:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/td512/.ssh/id_rsa):
Created directory '/home/td512/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/td512/.ssh/id_rsa.
Your public key has been saved in /home/td512/.ssh/id_rsa.pub.
The key fingerprint is:
f9:cd:fe:c1:77:90:40:34:9c:34:cb:f6:2c:cc:32:6a td512@kettecomp2
The key's randomart image is:
+--[ RSA 2048]----+
|           +*.   |
|           oo+   |
|            =    |
|         . + + . |
|        S o + =  |
|         o = o . |
|        E . o o o|
|       .   .   o.|
|            ...  |
+-----------------+
td512@kettecomp2:~$

之后,您需要将公钥复制到服务器。我最喜欢的方法是在文本编辑中打开 ssh 公钥并复制它。密钥可以在表示您的主目录的~/.ssh/id_rsa.pub位置找到。~

复制到剪贴板后,通过 ssh 连接到服务器并运行此命令(注意不要复制 + 粘贴,因为剪贴板中已经有公钥):

cd && mkdir .ssh && chmod 700 .ssh && touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys && nano .ssh/autorized_keys

上述代码将创建所需的目录和文件,然后使它们具有正确的权限。此后,您应该nano打开。粘贴您的公钥,在提示符下点击Ctrl+X说是,然后退出 ssh。

下一步是实现你的代码。可以这样做:

diff foo <(ssh myServer -l user -i .ssh/id_rsa 'cat foo')其中user是您的服务器用户名,.ssh/id_rsa是您的私钥。这应该会停止密码提示。

答案2

这样,diff命令就不会消耗输入,而ssh不是出现问题。

ssh myServer 'cat foo' | diff foo -

相关内容