1. 本地机器 A ip 192.168.32.160<br /> 跳板机 Bip 192.168.32.163<br /> 实际服务器 Cip 192.168.32.164

一、创建密钥对

A、B、C 分别创建 spider 用户;各自生成密钥对,拷贝 A 机器公钥到 B,B 公钥到 C,并修改 authorized_keys 权限为 600,.ssh 目录权限 700。

  1. # 此处省略了很多步骤,就是创建密钥对的操作,可以自行百度一下。
  2. ssh-keygen 生成密钥对
  3. chmod 600 .ssh/authorized_keys 修改权限

二、编辑本地机器 A 配置文件

  1. cd .ssh
  2. vim config
  3. Host centos7
  4. HostName 192.168.32.163
  5. port 22
  6. User root
  7. Host centos73
  8. HostName 192.168.32.164
  9. Port 22
  10. User root
  11. ProxyCommand ssh root@192.168.32.163 -W %h:%p
  12. Host 73spider
  13. HostName 192.168.32.164
  14. Port 22
  15. User spider
  16. 格式:
  17. 配置跳板机
  18. Host 任意名字
  19. HostName # 跳板机 ip
  20. Port # 跳板机端口
  21. User # 跳板机用户(实际存在的用户)
  22. 配置真实主机
  23. Host 任意名字
  24. HostName # 真正登陆的服务器,ip地址
  25. Port # 服务器端口
  26. User # 服务器用户名
  27. ProxyCommand ssh username@realip -W %h:%p

三、真实服务器 C 设置 iptalbes

因为都是本地的虚拟机,A 也能通过 ssh 直接访问 C,所以很难证明是不是跳板机 B 在起作用,所以在 C 上执行

  1. iptalbes -A INPUT -s 192.168.32.160 -j REJECT

该命令会拒绝来自 A 机器的所有访问。

四、测试

  1. # ssh 192.168.32.164
  2. ssh: connect to host 192.168.32.164 port 22: Connection refused
  3. 请求被拒绝,说明不能通过 A 机器之间连接 C
  4. # ssh centos73
  5. Last login: Mon Jul 24 03:09:39 2017 from 192.168.32.163
  6. [root@centos73 ~]#
  7. 此处调用的是 .ssh/config 的配置文件内的 centos73,故可以登陆 C 机器。

proxycommand

另外需在 A 机器的 .ssh/config 配置文件中添加以下配置。

  1. # man 5 ssh_config
  2. # vim .ssh/config
  3. Host *
  4. ForwardAgent yes # 默认转发密钥
  5. PasswordAuthentication yes # 允许密码登陆
  6. StrictHostKeyChecking no # 不自动接收公钥,如果设置为 yes,ssh 就不会自动把计算机的密钥加入到 .ssh/known_hosts 文件,并且一旦计算机的密钥发生了变化,就拒绝连接。
  7. HashKnownHosts yes # 将访问过的 hosts 以 hash 的形式存放,降低被入侵后信息暴露的风险
  8. Compression yes # 压缩传输,取值on/off/force。在 scp 等传输文件的情况下提高传输速度
  9. ServerAliveInterval 60
  10. ServerAliveCountMAx 5