参数详解
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-q:静默模式;
-X:开启X11转发功能;
-y:开启信任X11转发功能。
连接
如果公司的服务器在外网,一般会设置一个跳板机,访问公司其他服务器都需要从跳板机做一个ssh跳转,外网的服务器基本都要通过证书登录的。于是我们面临一个情况,本机ssh->跳板机->目标机器。如果直接在跳板机上放置公私钥对,并将跳板机上的公钥放到目标机器上,这样可以直接登录。但这样会有一个问题,跳板机上的root权限的用户可以获取普通用户的公私钥对,就算对私钥设置了密码,但是从安全角度来看,这样还是失去了保障,失去了服务器的一部分安全性。
如何来解决这个问题呢,其实ssh协议本身是支持秘钥转发的,不需要再跳板机上放置公私钥。
使用Xshell的话:
需要连接属性的“SSH”选项下勾选“使用密码处理的Xagent(SSH代理)”。
这样登陆到跳板机就可以直接连接服务器了。
使用windows SecureCRT密钥转发:
windows下SecureCRT配置转发,需要做以下设置:
Linux(Mac)下有如下两种方式:
方式一:
从linux客户端的ssh跳转时,执行命令:
ssh username@跳板机ip地址
然后在跳板机上跳转到目标机器
ssh username@服务器ip地址
跳板机ip和目标机器ip,username账户下已经在相应的 .ssh/authorized_keys
加入了公钥,配置是没有问题了,但是我们会遇到一个Pubkey Unauthorization的错误,因跳板机没有username的私钥。问题总是会有,解决方法也总是有,ssh是有转发密钥的功能,从本机跳转到跳板机时可以把私钥转发过去。
正确做法是,在本机linux客户端执行命令
ssh -A username`@跳板机ip
-A表示转发密钥,所以跳转到跳板机,密钥也转发了过来
接下来我们再在跳板机执行命令 :
ssh username@目标机器ip
另外可以配置本机客户端的默认配置文件,修改为默认转发密钥:
修改ssh_config(不是sshd_config,一般在/etc或者/etc/ssh下):
把 #ForwardAgent no 改为 ForwardAgent Yes
方法二:
ssh username@目标机器ip -p 22 -o ProxyCommand='ssh -p 22 username@跳板机ip -W %h:%p'
也可以修改配置文件 ~/.ssh/config , 若没有则创建:
Host tiaoban #任意名字,随便使用
HostName 192.168.1.1 #这个是跳板机的IP,支持域名
Port 22 #跳板机端口
User username_tiaoban #跳板机用户
Host nginx #同样,任意名字,随便起
HostName 192.168.1.2 #真正登陆的服务器,不支持域名必须IP地址
Port 22 #服务器的端口
User username #服务器的用户
ProxyCommand ssh username_tiaoban@tiaoban -W %h:%p
Host 10.10.0.* #可以用*通配符
Port 22 #服务器的端口
User username #服务器的用户
ProxyCommand ssh username_tiaoban@tiaoban -W %h:%p
配置好后, 直接 ssh nginx 就可以登录 192.168.1.2 这台跳板机后面的服务器。 也可以用 ssh username@10.10.0.xx
来登录10.10.0.27, 10.10.10.33, …. 等机器。