Client端:
如果不想泄露服务器的密码,就使用公钥-秘钥对(任何一对公钥-秘钥都可,一般是将Server的秘钥拷贝到Client端。)。Shell、PHP、Python等解释型语言可以使用公钥-秘钥,C、Java等编译型语言就无所谓了。
1.sshpass非交互密码认证:
sshpass -p 123456 ssh -Nqf -o TCPKeepAlive=yes -o ServerAliveInterval=60 -o ServerAliveCountMax=10 -o StrictHostKeyChecking=no -R 10000:localhost:22 -p7122 setup@zhangyi.rimag.com.cn
2.公钥-秘钥认证
ssh -Nqf -i id_rsa -o TCPKeepAlive=yes -o ServerAliveInterval=60 -o ServerAliveCountMax=10 -o StrictHostKeyChecking=no -R 10000:localhost:22 -p7122 setup@zhangyi.rimag.com.cn
注意 id_rsa文件的权限
chmod 600 id_rsa
3.公钥-秘钥生成
ssh-keygen
一直回车,会在 ~/.ssh/ 目录下生成 一对 id_rsa(私钥) id_rsa.pub(公钥)
把私钥拷贝到别处,将公钥公钥写到 authorized_keys 就可以无需密码访问
known_hosts 相当于访客登记,每次客户端输入 yes 就是这个文件
Server端:
查看端口号,ssh 隧道是否连通:
sudo netstat -lanp | grep 10000
连接Client端:
ssh -o StrictHostKeyChecking=no -p10000 zhangyi@127.0.0.1
断掉进程:
Server:
sudo netstat -lanp | grep 10000
Client:
ps -e | grep "ssh"
kill -9 ID
保证 ssh 隧道稳定性
网络的波动或者其他原因会影响 ssh 隧道连接的稳定,使用 autossh 可以保证隧道的稳定性,autossh 是一个用来启动 ssh 并进行监控的程序,可在需要时重启 ssh。
使用方法很简单,比如原来直接用ssh的命令:
ssh -p10000 zhangyi@127.0.0.1
改为:
autossh -M 5122 -p10000 zhangyi@127.0.0.1
TCPKeepAlive
指定系统是否向客户端发送 TCP keepalive 消息。默认值是"yes"。这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。可以设为"no"关闭这个特性。
ServerAliveInterval
在linux系统中使用ssh连接远程服务器时,为了防止时间超时,每60秒Server会发一个KeepAlive请求给Client响应,避免断开连接。
ClientAliveCountMax 10
Server发出请求后,客户端没有响应得次数达到10,就自动断开连接,正常情况下,Client不会不响应
StrictHostKeyChecking
实现当第一次连接服务器时,自动接受新的公钥。不需要手动敲yes,自动化任务用到。
ssh 其他参数参考:http://blog.sina.com.cn/s/blog_6ca2bddf0100rljn.html