0%

ssh原理及命令

一、SSH分客户端openssh-client和openssh-server

  • 若只想登录其他的机器,则安装openssh-client
  • 若想本机开放ssh,供别人登录,则安装openssh-server

    二、查看ssh是否开启

    指令:ps -ef | grep sshd
    1575620356(1)
    其中/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,确保私钥安全
    1575621494(1)
    在生成公钥时还生成了fingerprint
    查看/root/.ssh/目录:
    1575623995(1)
    1575623903(1)

六、第一次登录服务器(基于口令的认证)

1575622162(1)
上面的信息说的是:无法确认主机ssh-server.example.com(12.18.429.21)的真实性,不过知道它的公钥指纹(fingerprint),是否继续连接?
之所以用fingerprint代替key,主要是key过于长(RSA算法生成的公钥有1024位),很难直接比较。所以,对公钥进行hash生成一个128位的指纹,这样就方便比较了。
若输入yes:
1575622340(1)
则将追加到known_host文件中,此后的流程如下图:
1575622523(1)

  1. 远程Server收到Client端用户TopGun的登录请求,Server把自己的公钥发给用户。
  2. Client使用这个公钥,将密码进行加密。
  3. Client将加密的密码发送给Server端。
  4. 远程Server用自己的私钥,解密登录密码,然后验证其合法性。
  5. 若验证结果,给Client相应的响应。

私钥是Server端独有,这就保证了Client的登录信息即使在网络传输过程中被窃据,也没有私钥进行解密,保证了数据的安全性,这充分利用了非对称加密的特性。

七、基于公钥的认证

在上面介绍的登录流程中可以发现,每次登录都需要输入密码,很麻烦。SSH提供了另外一种可以免去输入密码过程的登录方式:公钥登录。流程如下:
1575624213(1)

  1. Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
  2. Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R),然后将加密后信息发送给Client。
  3. Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
  4. Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。
  5. Server端会最后比较Digest1和Digest2是否相同,完成认证过程。
    在服务端填写客户端公钥:cat ~/.ssh/id_rsa.pub(客户端) >> ~/.ssh/authorized_keys(服务端)
    转载:https://www.jianshu.com/p/33461b619d53