使用生成的公钥登录远程服务器

使用生成的公钥登录远程服务器

我有一个 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 $HOMEchmod 700 $HOME\.ssh也很重要,尽管最初描述的消息没有暗示这些。

相关内容