本地机器 A, ip 192.168.32.160<br /> 跳板机 B,ip 192.168.32.163<br /> 实际服务器 C,ip 192.168.32.164
一、创建密钥对
A、B、C 分别创建 spider 用户;各自生成密钥对,拷贝 A 机器公钥到 B,B 公钥到 C,并修改 authorized_keys 权限为 600,.ssh 目录权限 700。
# 此处省略了很多步骤,就是创建密钥对的操作,可以自行百度一下。
ssh-keygen 生成密钥对
chmod 600 .ssh/authorized_keys 修改权限
二、编辑本地机器 A 配置文件
cd .ssh
vim config
Host centos7
HostName 192.168.32.163
port 22
User root
Host centos73
HostName 192.168.32.164
Port 22
User root
ProxyCommand ssh root@192.168.32.163 -W %h:%p
Host 73spider
HostName 192.168.32.164
Port 22
User spider
格式:
配置跳板机
Host 任意名字
HostName # 跳板机 ip
Port # 跳板机端口
User # 跳板机用户(实际存在的用户)
配置真实主机
Host 任意名字
HostName # 真正登陆的服务器,ip地址
Port # 服务器端口
User # 服务器用户名
ProxyCommand ssh username@realip -W %h:%p
三、真实服务器 C 设置 iptalbes
因为都是本地的虚拟机,A 也能通过 ssh 直接访问 C,所以很难证明是不是跳板机 B 在起作用,所以在 C 上执行
iptalbes -A INPUT -s 192.168.32.160 -j REJECT
该命令会拒绝来自 A 机器的所有访问。
四、测试
# ssh 192.168.32.164
ssh: connect to host 192.168.32.164 port 22: Connection refused
请求被拒绝,说明不能通过 A 机器之间连接 C
# ssh centos73
Last login: Mon Jul 24 03:09:39 2017 from 192.168.32.163
[root@centos73 ~]#
此处调用的是 .ssh/config 的配置文件内的 centos73,故可以登陆 C 机器。
proxycommand
另外需在 A 机器的 .ssh/config 配置文件中添加以下配置。
# man 5 ssh_config
# vim .ssh/config
Host *
ForwardAgent yes # 默认转发密钥
PasswordAuthentication yes # 允许密码登陆
StrictHostKeyChecking no # 不自动接收公钥,如果设置为 yes,ssh 就不会自动把计算机的密钥加入到 .ssh/known_hosts 文件,并且一旦计算机的密钥发生了变化,就拒绝连接。
HashKnownHosts yes # 将访问过的 hosts 以 hash 的形式存放,降低被入侵后信息暴露的风险
Compression yes # 压缩传输,取值on/off/force。在 scp 等传输文件的情况下提高传输速度
ServerAliveInterval 60
ServerAliveCountMAx 5