SSH 无密码登录 Linux

小鱼儿 2021-09-14 16:42 583阅读 0赞

SSH Key的知识

Linux系统有一个钥匙环(keyring)的管理程序.钥匙环受到用户登录密码的保护.当你登录Linux系统时,会自动解开钥匙环的密码,从而可访问钥匙环.SSH的密钥和公钥也存储在钥匙环.所以初次使用SSH密钥登录远程Linux服务器时需要输入一次SSH密钥的密码.而将来使用SSH密钥登录时不再输入密码.Ubuntu的钥匙环程序是seahorse.

SSH密钥就好比是你的身份证明.远程Linux服务器用你生成的SSH公钥来加密一条消息,而只有你的SSH密钥可以解开这条消息.所以其他人如果没有你的SSH密钥,是无法解开加密消息的,从而也就无法登录你的Linux服务器.

SSH无密码登录的设置就是这么简单。


无密码登录Linux的设置步骤

SSH无密码登录Linux的设置步骤:
1、首先我们在自己的Linux系统上生成一对SSH Key:SSH密钥和SSH公钥.密钥保存在自己的Linux系统上。
2、然后公钥上传到Linux服务器.之后我们就能无密码SSH登录了.SSH密钥就好比是你的身份证明

一、在自己的Linux系统上生成SSH密钥和公钥
打开终端,使用下面的ssh-keygen来生成RSA密钥和公钥.-t表示type,就是说要生成RSA加密的钥匙

  1. cd .ssh
  2. ssh-keygen -t rsa

RSA也是默认的加密类型.所以你也可以只输入ssh-keygen.默认的RSA长度是2048位.如果你非常注重安全,那么可以指定4096位的长度。

  1. ssh-keygen -b 4096 -t rsa

生成SSH Key的过程中会要求你指定一个文件来保存密钥,按Enter键使用默认的文件就行了.然后需要输入一个密码来加密你的SSH Key.密码至少要20位长度.SSH密钥会保存在home目录下的.ssh/id_rsa文件中.SSH公钥保存在.ssh/id_rsa.pub文件中。

  1. Generating public/private rsa key pair.
  2. Enter file in which to save the key (/home/matrix/.ssh/id_rsa):  Enter
  3. Enter passphrase (empty for no passphrase):   输入一个密码
  4. Enter same passphrase again:   再次输入密码
  5. Your identification has been saved in /home/matrix/.ssh/id_rsa.
  6. Your public key has been saved in /home/matrix/.ssh/id_rsa.pub.
  7. The key fingerprint is:
  8. e1:dc:ab:ae:b6:19:b0:19:74:d5:fe:57:3f:32:b4:d0 matrix@vivid
  9. The key's randomart image is:
  10. +---[RSA 4096]----+
  11. | .. |
  12. | . . |
  13. | . . .. . |
  14. | . . o o.. E .|
  15. | o S ..o ...|
  16. | = ..+...|
  17. | o . . .o .|
  18. | .o . |
  19. | .++o |
  20. +-----------------+

查看.ssh/id_rsa文件就会看到,这个文件是经过加密的(encrypted),也就是用你输入的密码来加密。

  1. less .ssh/id_rsa

这里写图片描述

二、将SSH公钥上传到Linux服务器
可以使用ssh-copy-id命令来完成

  1. ssh-copy-id username@remote-server

这里写图片描述

输入远程用户的密码后,SSH公钥就会自动上传了.SSH公钥保存在远程Linux服务器的.ssh/authorized_keys文件中。

上传完成后,SSH登录就不需要再次输入密码了.但是首次使用SSH Key登录时需要输入一次SSH密钥的加密密码。(只需要输入一次,将来会自动登录,不再需要输入密钥的密码.)

使用scp命令来传送文件时也不需要输入密码。


配置服务器别名

虽然经过上面的配置,我们不用在每次登录时都输入密码。当仍然需要我们输入用户名和服务器ip。有没有可能把这一步骤也省略呢?答案是肯定的,通过配置服务器别名的方式,登录时只需输入别名即可。

一、打开~/.ssh/config文件,添加以下内容(如果木有 ~/.ssh/config 文件的话就自个儿建一个吧)

  1. Host server-alias    # server-alias为SSH链接的服务器别名
  2. HostName server-ip # 服务器地址
  3. Port 22
  4. User username # 服务器端用户名
  5. PreferredAuthentications publickey
  6. IdentityFile ~/.ssh/id_rsa   # 私钥地址,默认为 ~/.ssh/id_rsa

二、验证,以后即可通过以下命令登录远程服务器

  1. ssh server-alias

常见问题及解决方案

一、生成密钥并上传至远程主机后,任然不可用 。

1、打开服务器的 /etc/ssh/sshd_config 这个文件,取消注释

  1. #AuthorizedKeysFile .ssh/authorized_keys

2、重启服务器的ssh服务。

  1. #RHEL/CentOS系统
  2. $ service sshd restart
  3. #ubuntu系统
  4. $ service ssh restart
  5. #debian系统
  6. $ /etc/init.d/ssh restart

3、执行ssh-copy-id 命令

  1. ssh-copy-id 远程用户名@远程IP地址
  2. //如果不是默认端口22,是9001
  3. ssh-copy-id -p 9001 远程用户名@远程IP地址

二、ssh连接远程主机时,出现 sign_and_send_pubkey: signing failed: agent refused operation 错误,并且还是需要输入密码。

此时,表示ssh-agent 已经在运行了,但是找不到附加的任何keys,就是说你生成的key,没有附加到ssh-agent上,需要附加一下执行。

查看hosts中是否配置了git服务器的地址,那样的话,会一直让你输入密码

  1. ssh-add
  2. //当然你也可以查看附加了哪些key
  3. ssh-add -l
  4. ssh 远程用户名@远程IP地址
  5. //如果不是默认端口22,是9001
  6. ssh -p 9001 远程用户名@远程IP地址

如果显示下面的错误

  1. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  2. @ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
  3. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  4. The ECDSA host key for [git.bbdservice.net]:51668 has changed,
  5. and the key for the corresponding IP address [10.10.80.26]:51668
  6. is unknown. This could either mean that
  7. DNS SPOOFING is happening or the IP address for the host
  8. and its host key have changed at the same time.
  9. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  10. @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
  11. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  12. IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
  13. Someone could be eavesdropping on you right now (man-in-the-middle attack)!
  14. It is also possible that a host key has just been changed.
  15. The fingerprint for the ECDSA key sent by the remote host is
  16. 6e:92:c8:d6:f2:45:ae:ff:5f:1d:21:8b:01:52:8a:82.
  17. Please contact your system administrator.
  18. Add correct host key in /home/glowd/.ssh/known_hosts to get rid of this message.
  19. Offending ECDSA key in /home/glowd/.ssh/known_hosts:1
  20. remove with: ssh-keygen -f "/home/glowd/.ssh/known_hosts" -R [git.bbdservice.net]:51668
  21. ECDSA host key for [git.bbdservice.net]:51668 has changed and you have requested strict checking.
  22. Host key verification failed.
  23. fatal: Could not read from remote repository.

说明你连接的那一行访问,验证已经改变,/home/glowd/.ssh/known_hosts:1,删除那一行,或者直接把整个known_hosts文件删除,重新连接一次就好了

发表评论

表情:
评论列表 (有 0 条评论,583人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ubuntu创建ssh密码登录

    这几天在自己的ubuntu机器上,研究sector/sphere,突然发现我原来在公司配置ssh无密码登录的办法无效,后来搜索后知道了原因,现将ubuntu上设置ssh无密码登

    相关 linux ssh密码登录

    使用一种被称为"公私钥"认证的方式来进行ssh登录. "公私钥"认证方式简单的解释:首先在客户端上创建一对公私钥 (公钥文件:~/.ssh/id\_rsa.pub; 私钥文件:

    相关 SSH 密码登录 Linux

    SSH Key的知识 Linux系统有一个钥匙环(keyring)的管理程序.钥匙环受到用户登录密码的保护.当你登录Linux系统时,会自动解开钥匙环的密码,从而可访问钥