缘起
今天使用ssh -i指定私钥时遇到以下错误:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/ken/.ssh/my.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/eric/.ssh/my.pem": bad permissions
查了一下,原因是私钥文件的权限问题。详细解释如下。
ssh -i
参数用于指定一个私钥文件,以便在通过 SSH 连接到远程服务器时进行身份验证。这个参数特别适用于使用密钥对(公钥和私钥)进行身份验证的情况,而不是使用密码。
以下是 ssh -i
参数的基本用法:
ssh -i <私钥文件路径> <用户名>@<远程服务器地址>
示例
假设你有一个私钥文件 my_private_key
,并且你想以用户 john
的身份连接到远程服务器 example.com
,你可以这样使用 ssh -i
参数:
ssh -i /path/to/my_private_key john@example.com
详细说明
- 私钥文件路径:这是你本地机器上私钥文件的完整路径。私钥文件通常是以
.pem
、.ppk
或没有扩展名的形式存在。 - 用户名:这是你在远程服务器上的用户名。
- 远程服务器地址:这是远程服务器的 IP 地址或域名。
注意事项
-
权限:私钥文件应该有适当的权限设置,通常是
600
或400
,以确保只有你(文件的所有者)可以读取它。你可以使用以下命令设置权限:chmod 600 /path/to/my_private_key
-
公钥配置:在连接之前,确保你的公钥已经添加到远程服务器的
~/.ssh/authorized_keys
文件中。 -
默认私钥:如果你没有指定
-i
参数,SSH 会尝试使用默认的私钥文件,通常是~/.ssh/id_rsa
或~/.ssh/id_dsa
。
高级用法
如果你有多个私钥文件,并且需要根据不同的服务器使用不同的私钥,你可以使用 -i
参数多次指定不同的私钥文件。例如:
ssh -i /path/to/key1 -i /path/to/key2 user@example.com
在这种情况下,SSH 会尝试使用第一个私钥文件进行身份验证,如果失败,则会尝试使用第二个私钥文件。
通过使用 ssh -i
参数,你可以更灵活地管理你的 SSH 连接,并提高安全性,因为使用密钥对进行身份验证通常比使用密码更安全。