Linux设置SSH密钥以及别名无密码登录

Linux设置SSH密钥以及别名无密码登录

本文基于S:Lentos release 7.2&C:MacOS 进行的学习记录,初衷是解决多个服务器总要找IP地址和不同服务器有多个不同密码的问题,没想到这么一个简单的问题却弄了小半天。

首先生成使用密钥对 使用ssh-keygen生成密钥对
生成的文件默认保存在~/.ssh/目录下,一般会用到下面三个命令:
  • -t 指定密钥类型,支持“dsa”,”ecdsa”,”ed25519”,”rsa”,默认类型为“rsa”
  • -f filename 指定生成密钥文件的名字 ,公钥filename.pub ,私钥filename
  • -C 对密钥进行补充说明 ,在filename.pub内容末尾处
    执行一下命令后,会提示是否对密钥使用密码,如果为了方便可以直接回车,自己的电脑为共享环境建议使用密码
user@client:.sshssh-keygen -f test -C 这是一个测试密钥 Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in test. Your public key has been saved in test.pub. The key fingerprint is: SHA256:V4oFwHjA96nOPz9YKWxB4IMuJALPyxZLadZUpDy5Ykg 这是一个测试密钥 The key's randomart image is: +---[RSA 2048]----+ |..o*=o.| |.o =o=+ ..| |oEX Booo .. .| |oO = o .+o o| |. O ooS.o.| | o o. +.o| |o . +| |o o .| |..o..| +----[SHA256]-----+

执行完成后生成两个文件tes和test.pub
user@client:.sshcat test test.pub -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn *************************************** qtufyLXIB2Ej6Nu05QAAABjov5nmmK/kuIDkuKrmtYvor5Xlr4bpkqUB -----END OPENSSH PRIVATE KEY-----??以上是test内容 ssh-rsa AAAAB3NzaC1yc2EAAAADAQAB******B9pxGFIXoZFWJmGPNmYT/rlXV 这是一个测试密钥--------这里是公钥内容

使用ssh-copy-id将本地的公钥复制到远程主机上的authorized_keys的文件上,并对remote 主机的用户的~/.ssh和~/.ssh/authorized_keys文件设置合适的权限
语法:ssh-copy-id [-i [identity_file]] [user@]machine -i:指定公钥文件 ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

然后就可以使用ssh调用私钥进行登录Server端
user@server:ssh -i ~/.ssh/test user@server

如果仍需要密码来进行登录,首先确定权限的问题
  • 打开sshd_config文件
    sudo vi /etc/ssh/sshd_config
  • 修改以下参数配置
#是否启用root用户登录 PermitRootLogin yesRSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile.ssh/authorized_keys# 是否允许密码授权登录 PasswordAuthentication no

  • 重启sshd服务
systemctl restartsshd.service 或者 service sshd restart

到这里基本就可以实现使用密钥进行无密码登录了,但是使用别名登录的过程中碰到了权限没问题的情况下一直提示让输入密码的问题。找到了两个解决办法,首先说一下设置ssh别名使用的问题,并且在/etc/log/secure 里一直得到 Connection closed by xxx [preauth]的提示
  • 首先设置一下别名
1.Host server 2.HostName 127.0.0.1##登录主机名或者IP地址 3.Port 22##指定端口号 4.User root##登录用户名 5.IdentityFile~/.ssh/test.pub##登录公钥 6.IdentitiesOnly yes##只接受key登录Host server2 HostName 192.168.1.2 User User

【Linux设置SSH密钥以及别名无密码登录】这样之后就可以用 ssh server 这样的命令进行登录了,但是我在设置完成之后(我的config中没有写4&5),而且我配置的是两台服务器,在server可以使用别名无密码登录的情况下,server2却一直提示让输入密码。网上找半天也没找到原因,后来在不断尝试下找到两个解决办法
  1. 在config文件中指定IdentityFile
  2. 用ssh-add添加密钥到ssh-agent中
    ssh-add ~/.ssh/私钥
    不明所以,但是以上两个方法解决了我的使用问题。
我的无用域名

    推荐阅读