一、SSH分客户端openssh-client和openssh-server
- 若只想登录其他的机器,则安装openssh-client
- 若想本机开放ssh,供别人登录,则安装openssh-server
二、查看ssh是否开启
指令:ps -ef | grep sshd
其中/usr/sbin/sshd为ssh clinet/server中server端的守护进程,如果上述结果中没有sshd出现,那么可能就是你的server端程序没有安装三、启动与关闭
/etc/init.d/ssh start
/etc/init.d/ssh stop四、配置
/etc/ssh/sshd_config 在这里可以配置端口号,默认为22五、生成密钥(密码和钥匙)
ssh-keygen -t rsa -P ‘’ - t:密钥类型(rsa、dsa、ecdsa等)
- P:指定passphrase,确保私钥安全
在生成公钥时还生成了fingerprint
查看/root/.ssh/目录:
六、第一次登录服务器(基于口令的认证)
上面的信息说的是:无法确认主机ssh-server.example.com(12.18.429.21)的真实性,不过知道它的公钥指纹(fingerprint),是否继续连接?
之所以用fingerprint代替key,主要是key过于长(RSA算法生成的公钥有1024位),很难直接比较。所以,对公钥进行hash生成一个128位的指纹,这样就方便比较了。
若输入yes:
则将追加到known_host文件中,此后的流程如下图:
- 远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。
- Client使用这个公钥,将密码进行加密。
- Client将加密的密码发送给Server端。
- 远程Server用自己的私钥,解密登录密码,然后验证其合法性。
- 若验证结果,给Client相应的响应。
私钥是Server端独有,这就保证了Client的登录信息即使在网络传输过程中被窃据,也没有私钥进行解密,保证了数据的安全性,这充分利用了非对称加密的特性。
七、基于公钥的认证
在上面介绍的登录流程中可以发现,每次登录都需要输入密码,很麻烦。SSH提供了另外一种可以免去输入密码过程的登录方式:公钥登录。流程如下:
- Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
- Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R),然后将加密后信息发送给Client。
- Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
- Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。
- Server端会最后比较Digest1和Digest2是否相同,完成认证过程。
在服务端填写客户端公钥:cat ~/.ssh/id_rsa.pub(客户端) >> ~/.ssh/authorized_keys(服务端)
转载:https://www.jianshu.com/p/33461b619d53