SSH
生成公钥与私钥
使用 ssh-keygen
命令生成,默认会保存在 .ssh/
目录中,生成两个文件,即私钥 id_rsa
,公钥 id_rsa.pub
。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
69:65:32:1e:dc:e8:59:1f:72:90:0a:a2:73:cb:07:48 root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
| .. |
| E . .. o.. |
| . o . .*.* o |
| + o o.X + . |
| + o S . |
| o .. |
| . |
| |
| |
+-----------------+
用私钥生成公钥
如果公钥丢失,可以用私钥重新生成:
$ ssh-keygen -y -f id_rsa > key.pub
authorized_keys
使用 OpenSSH 时,在服务器端,通常会把授权的公钥放在其默认配置文件 ~/.ssh/authorized_keys
中。
SSH 的配置文件 /etc/ssh/sshd_config
中,AuthorizedKeysFile
指令用于告诉服务器去哪里查找授权的密钥。该选项可以包含不止一个位置,中间用空格分隔。
如何不用密码连接 SSH
使用 keychain 免输入 SSH 密码
agent forwarding
SSH 协议会使用 转发客户端 机制,即 agent forwarding。SSH 客户端允许 SSH 服务器 使用其 本地的 ssh-agent
客户端程序,感觉就像该客户端是从服务器本地连接进来的。此时,远端的客户端程序会先与 ssh-agent
通信,服务器与远端客户端的通信都会通过它进行 中转。
如要实现转发客户端,必须在客户端的配置中启用 ForwardAgent
选项,同时服务器端也要启用 AllowAgentForwarding
选项。
解决办法
- 生成私钥和公钥,如
.ssh/id_rsa
及.ssh/id_rsa.pub
- 在客户端上,在
/etc/ssh/ssh_config
中配置ForwardAgent yes
- 在服务端上,在
/etc/ssh/sshd_config
中配置PubkeyAuthentication yes
,如果需要也可以配置StrictModes no
,AllowAgentForwarding yes
。 - 安装 keychain,在客户端
~/.bash_profile
中加入以下内容:
/usr/local/bin/keychain $HOME/.ssh/id_rsa
source $HOME/.keychain/${HOSTNAME}-sh
keychain id_rsa
会生成 .keychain/${HOSTNAME}-sh
文件,其内容为:
SSH_AUTH_SOCK=/tmp/ssh-65d6SFQYJPFs/agent.2093; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2094; export SSH_AGENT_PID;
- 在 crontab 的脚本中,添加以下内容,即可以免去输入密码的步骤:
source $HOME/.keychain/${HOSTNAME}-sh