在使用ssh-copy-id拷贝公钥及ssh-agent添加passphrase一文中,我们已经知道ssh-agent可以免除输入passphrase的麻烦,本文演示其另一功能,SSH agent forwarding。
假设有3台机器,客户机,位于公网的跳板机和位于内网的目标机。
为了访问内网的目标机,通常需要将目标机的私钥放置在跳板机上。而SSH agent forwarding可以实现以下的功能:
- 跳板机上无需放置目标机的私钥
- 跳板机通过访问客户机上的ssh-agent获取私钥
注意,前提是客户机可以访问跳板机,也就是具有访问跳板机的私钥
因此在客户机上需要启动ssh-agent,并添加目标机的私钥。
# 以下操作均位于客户机
$ eval `ssh-agent`
Agent pid 17808
# 可以指定key的路径,例如ssh-add -k /tmp/id_rsa
$ ssh-add
Identity added: /c/Users/yyxiao/.ssh/id_rsa (/c/Users/yyxiao/.ssh/id_rsa)
$ ssh-add -l
2048 SHA256:VSjsgy1rieKeqZqSOf/ubyXilTwdwURLZOPcuxaA3pU /c/Users/yyxiao/.ssh/id_rsa (RSA)
客户机和跳板机均需要允许SSH Agent Forwarding,或者说ssh和sshd都需要允许SSH Agent Forwarding。
客户机的配置可以在ssh_config文件中配置,或者使用-A选项。sshd的配置需要以下选项,默认是允许的:
AllowAgentForwarding yes
下面我们来验证这个过程:
# 在客户机上,以-A选项登录跳板机
$ ssh -A opc@130.61.120.167
Last login: Wed Nov 4 09:12:15 2020 from 202.45.129.203
# 在跳板机上,确认没有存私钥文件id_rsa
[opc@instance-20201027-1039 ~]$ ls -l ~/.ssh
total 12
-rw-------. 1 opc opc 398 Oct 27 02:40 authorized_keys
-rw-------. 1 opc opc 1672 Nov 4 03:16 id_rsa.orig
-rw-r--r--. 1 opc opc 342 Nov 4 03:23 known_hosts
# 在跳板机上,登录目标机成功
[opc@instance-20201027-1039 ~]$ ssh 10.0.1.14
Last login: Wed Nov 4 09:09:12 2020 from instance-20201027-1039.sub07281614200.training.oraclevcn.com