ssh agent
ssh-agent是一个运行在后台的程序,用于管理本地的keys。
通常启动ssh-agent时,会加载用到的keys到内存。这样,在实际用到key的时候,就不必每次都输入passphrase密码指定key了。
- Local —(SSH)—> Server1
#启动ssh-agent
eval `ssh-agent`
#添加key(private key)
ssh-add ~/.ssh/id_rsa
#查看ssh-agent中管理的keys
ssh-add -L
#连接
ssh -vT user@your Server1 ip
ssh agent forwarding
SSH agent forwarding支持SSH免密码连接第三方远程服务器(如从本地ssh到远程服务器,在远程服务器使用同一个私钥,访问另一台机器)。 SSH agent forwarding是基于ssh-agent的。通过SSH agent forwarding,不仅客户端可以利用本地的ssh-agent管理keys连接远程服务器,而且远程服务器还可以利用客户端本地的ssh-agent访问第三方服务器,就如同ssh-agent运行在远程服务器上一样。
-
Local —(SSH)—> Server1 —(SSH)—> Server2
-
方法一
#在Server1上启动ssh-agent
#确认ssh-agent运行中
echo "$SSH_AUTH_SOCK"
#如果没有,则启动ssh-agent
ssh-agent -s
#添加key(private key)
ssh-add ~/.ssh/id_rsa
#forwarding登录Server2
ssh -A user@your Server2 ip
- 方法二
#修改 ~/.ssh/config 設定,加上 ForwardAgent yes,這樣就不需要每次連都加上 -A 參數。例如
Host Server2
HostName your Server2 ip
ForwardAgent yes
Systemd to spawn ssh-agent and adding your keys
#创建service文件
#~/.config/systemd/user/ssh-agent.service:
#第一步
[Unit]
Description=SSH key agent
[Service]
Type=forking
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -a $SSH_AUTH_SOCK
[Install]
WantedBy=default.target
#第二步
echo 'export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"' >> ~/.bash_profile
#第三步
systemctl --user enable ssh-agent
systemctl --user start ssh-agent
#SSH 7.2
echo 'AddKeysToAgent yes' >> ~/.ssh/config
不配置ssh agent的方法
Host Server1
Hostname your Server1 ip
User user
IdentityFile ~/.ssh/xxx.pem
ServerAliveInterval 15
Host Server2
Hostname your Server2 ip
User user
IdentityFile ~/.ssh/xxx.pem
ProxyCommand ssh user@your Server1 ip -W %h:%p
ServerAliveInterval 15
#运行
ssh Server2
使用xshell
第一步
第二步
第三步
参考文档
Github Using SSH agent forwarding