我有一个 zsh 脚本,用它登录远程主机来复制一些文件夹。系统每次都会要求我提供我想要绕过的本地主机的密码,否则我必须多次输入密码。
我按照以下教程进行操作: https://www.thegeekstuff.com/2008/06/perform-ssh-and-scp-without-entering-password-on-openssh/
它曾经起作用过,但后来就不起作用了。我按照以下步骤操作(并再次按照这些步骤操作了很多次),但现在它不再起作用了。
[local-host]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/jsmith/.ssh/id_rsa):<Hit enter>
Enter passphrase (empty for no passphrase): <Enter your passphrase here>
Enter same passphrase again:<Enter your passphrase again>
Your identification has been saved in /home/jsmith/.ssh/id_rsa.
Your public key has been saved in /home/jsmith/.ssh/id_rsa.pub.
The key fingerprint is:
31:3a:5d:dc:bc:81:81:71:be:31:2b:11:b8:e8:39:a0 jsmith@local-host
然后,我从本地主机复制公钥的内容并将其粘贴到/home/jsmith/.ssh/authorized_keys
远程主机上并运行:
[remote-host]$ chmod 755 ~/.ssh
[remote-host]$ chmod 644 ~/.ssh/authorized_keys
但如果我再次尝试登录,
[local-host]$ ssh jsmith remote-host
但不是有以下消息:
Enter passphrase for key '/home/jsmith/.ssh/id_rsa': <Enter your passphrase here>
Last login: Sat Jun 07 2008 23:03:04 -0700 from 192.168.1.102
No mail.
我明白了:
jsmith remote-host's password:
我究竟做错了什么?
编辑
非常感谢您的回答和评论,我将尽力逐点解决:
- 关于
-l
,我确实没有使用,但我使用了ssh jsmith@remote-host
- 我运行以下命令并输出以下结果
[local-host]$ eval $(ssh-agent -s)
Agent pid 96546
[local-host]$ env | grep SSH
SSH_AUTH_SOCK=/var/folders/jq/yyp9q2fs1z5780k9l1_2ph4r0000gn/T//ssh-9ew9mjQCJWFK/agent.96545
SSH_AGENT_PID=96546
编辑2
然后我尝试了以下方法
[local-host]$ ssh-add .ssh/id_rsa
Enter passphrase for .ssh/id_rsa:
Bad passphrase, try again for .ssh/id_rsa:
编辑3
好的,远程计算机和本地计算机上的整个权限树如下:
/var/services/homes/user01/.ssh/
每个分支的权限如下(使用ls -ld <directory>
和ls -la <file>
命令(从下往上):
对于远程机器:
drwxr-xr-x 1 user01 users 0 Oct 3 16:44 .ssh
drwxrwxrwx+ 1 user01 users 90 Oct
lrwxrwxrwx 1 root root 14 Oct 4 09:07 homes -> /volume1/homes
drwxr-xr-x 2 root root 4096 Oct 4 09:07 services
drwxr-xr-x 15 root root 4096 Oct 4 09:07 var
对于本地机器:
drwx------ 7 user02 staff 224B Oct 4 09:27 .ssh/
drwxr-xr-x+ 152 user02 staff 4.8K Oct 4 09:27 user02/
drwxr-xr-x 6 root admin 192B Jan 1 2020 /Users/
你知道我下一步应该做什么吗?
提前谢谢了
答案1
您需要运行本地 ssh-agent。在“我尝试再次登录”中,您忘记了-l
(或者,jsmith@remote-host
)。
你很有可能做过启动代理并完成该ssh-add
部分,但在不同的会话中。我所做的是从我的窗口管理器初始化中调用eval $(ssh-agent -s)
,这样任何 shell 都会知道代理......
$ env | grep SSH
SSH_AUTH_SOCK=/tmp/ssh-LxwUgd8tuGU3/agent.1023801
SSH_AGENT_PID=1023802
最重要的是, achmod 750 $HOME
和chmod 700 $HOME\.ssh
也很重要,尽管最初描述的消息没有暗示这些。