什么是SSH
- 用于计算机之间的加密登录,登录信息全部加密,被劫持也不会泄露密码。
- 只是一种协议,有多种实现,比如
OpenSSH
就是一个开源实现 - Windows系统里,推荐一个SSH工具:PuTTY
基本使用
ssh user@host
- 默认将从端口22登录,如果省略user,会默认和本机当前用户名相同。
- 可以增加
-p [port]
来修改登录端口,当然,得是对方主机允许登录的端口
- 密码登录:
- 主机把它的公钥发给用户,用户用它加密登录密码并发送给主机。
- 主机收到加密后的密码,用对应的私钥解密,验证登录。
- “中间人攻击”:攻击者在冒充主机发送假公钥。针对这个问题,主机会在你第一次登录的时候发来公钥指纹(其实就是一个hash值),用户通过别的渠道,比如跟主机对外的网站公布的公钥指纹来比对,然后接受或者拒绝。之后,这个记录会被记录在用户的
~/.ssh/known_hosts
文件里。(/etc/ssh/ssh_known_hosts
里保存的是所有用户都信赖的主机公钥)
- 非密码登录
- 和上面的流程不一样,但原理一致,
- ssh-keygen是一个生成、管理ssh用公私钥的工具(SSH1协议对应RSA密钥,SSH2协议对应RSA或者DSA),公私钥会生成在
~/.ssh/
下 - 用户生成钥匙对后,应该把公钥存在主机上。通过命令
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
将把本地公钥拷贝到远程主机的authorized_keys
文件里(其实就是在末尾追加了字符串),还会把身份标识文件追加到远程主机的~/.ssh/authorized_keys
里,并给远程主机的用户主目录适当的权限 - 主机的
/etc/ssh/sshd_config
文件里修改为RSAAuthentication yes
、PubkeyAuthentication yes
、AuthorizedKeysFile .ssh/authorized_keys
要去掉注释,然后重启ssh服务:ubuntu——service ssh restart
;debian——/etc/init.d/ssh restart
- 登录的时候主机会发来一段随机字符串,用户用自己的私钥加密发给主机
- 私钥还可以自己加密
- 主机用用户留存的公钥解密,验证登录
sshpass
- 生产环境不应该使用。因为出发点是不想记密码,但是用这个密码会轻易的从客户端泄露(比如用
ps
命令),所以从出发点来看,设置为上面的第二种“非密码登录”是比较合理的。所以,只推荐在不方便设置为非密码登录的情况下,比如在测试环境使用这个方法。 - 这是一个命令行工具,利用我们能够向命令提示符本身提供密码(非交互式密码验证),这样就可以通过 cron 调度器执行自动化的 Shell 脚本,比如进行自动备份。(sshpass在专门的tty中运行ssh,误导ssh相信它是从用户接收到的密码。)
- 在Linux和OS X系统安装是有区别的。
- 在Linux里就是很简单的通过yum或者apt-get安装(centos/redhat或debian/ubuntu)
- 在OS X里,要先安装xcode和命令行工具(command line tools),然后再安装一个非官方包
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
使用:
sshpass -p 'my_psw' ssh user@host
- 一般来讲,更加懒人的做法是写一个Shell脚本,然后用简洁的名字命名,这样使用起来就更加快捷,也不至于在命令行把密码暴露这么low
还可以用
-e
标志,将密码作为SSHPASS
的环境变量输入:1
2
3export SSHPASS='my_psw'
echo $SSHPASS
sshpass -e ssh user@host可以和scp命令配合,传输文件
scp -r path/file.name --rsh="sshpass -p 'my_psw' ssh -l user" host:/path
本地config配置
- 首先,说明一下
/etc/ssh/
这个目录是系统的SSH配置目录,我们一般只需要修改~/.ssh/
这个用户目录下的就可以,如果没有可以新建。 通过配置config文件,可以实现更加便捷的SSH操作,比如,可以实现登录不同主机使用不同的SSH Key
1
2
3
4
5Host dib(这里就是设置别名了)
HostName xxx.xxx.xx.xx(主机名,ip地址或者域名都可以)
Port 22(默认ssh是22,也可以自己改掉)
User root
IndentityFile ~/.ssh/id_rsa通过以上的配置,直接执行
ssh dib
就可以通过SSH登录主机了。