Linux系统中实现免密码(SSH)登录可以通过配置SSH的密钥认证来完成,主要通过公钥/私钥的机制。下面是步骤指南:
1. 生成SSH Key(如果您还没拥有SSH key)
首先在您想要设置成无需输入密码即可远程登录的机器上(本地电脑),使用如下命令创建公钥与私钥对:
bash
sshkeygen t rsa C "your_email@example.com"
按照提示按回车默认保存密钥或者自定义路径(例如保存于`~/.ssh/id_rsa`)。系统会要求你输入一个保护该私钥的短语,您可以直接按回车留空以实现免密功能,但是这也带来了安全风险——因为这使得任何人都能访问您的机器。
2. 将生成的公钥复制到您想要连接的远程服务器(目的主机)的`.ssh/authorized_keys`文件中。
这可以通过sshcopyid 工具实现:
使用 sshcopyid (最简单的方式)
在您本地的计算机中打开终端,执行以下命令,用您的实际用户名替换“username”,以及目标机器的实际地址替换"192.168.1.101":
bash
sshcopyid i ~/.ssh/id_rsa.pub username@192.168.1.101
执行上述命令后,它会自动将你的`~/.ssh/id_rsa.pub`内的公钥添加进目标机`/home/user_name/.ssh/authorized_keys`中。
如果没有安装这个工具,则需要自己复制文件过去再手动追加:
在您的本地计算机的命令行窗口运行下面的命令将本地用户的身份密钥复制到远程计算机:
bash
cat ~/.ssh/id_rsa.pub | ssh user_name@remotehost "mkdir p ~/.ssh; cat >> ~/.ssh/authorized_keys"
或者您需要指定私钥的:
bash
ssh i /path/to/ssh/private/key/id_rsa user@your.server.example "mkdir p ~/.ssh && touch ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
然后:
bash
cat ~/.ssh/id_rsa.pub | ssh i /path/to/privatekey key_user@remote 'cat >> ~/.ssh/authorized_keys'
3. 确保目标系统的`.ssh`目录及其子项的适当安全性:
在远程服务器上的`.ssh`目录及其中所有文件(包括您的`~/.ssh/authorized_keys`)都需要设定适当的权限来保障系统安全。
可以通过运行如下命令来做到这:
bash
chmod 700 ~/.ssh 确保仅属于该用户
chmod 600 ~/.ssh/ 确保其内容也是完全隐私的
以上步骤完成后,您便能够在未被要求进行交互式用户密码验证的情况下的从本地机器直接ssh登陆至目标主机了。
请记住,使用密钥认证可以大大提高便利性,同时降低了一些类型的风险(如字典攻击),但是这也带来了一种新的风险:任何人拥有了您的身份公钥就可以冒名顶替您连接到该服务器。
如果您正在为生产环境服务器进行此类操作,请考虑更高级的安全措施,比如限制哪些主机/IP可以使用公钥进行连接,开启防火墙规则只允许特定IP/主机连接等措施,从而减少安全风险。
发表评论