首先,如果这是一个非常明显/微不足道的问题,我深表歉意,我仍在学习 linux/unix 的来龙去脉。
我使用一些需要通过 ssh 和私钥访问才能登录的服务器。所以,命令是这样的:
ssh -i /path/to/key.pem [email protected]
我创建了一个 bash 脚本,让我可以使用自己的调用,access
并且只有一个基本的 switch 语句用于后面的参数来控制我登录到哪个服务器。例如,access server1
将发出适当的ssh
命令来登录 server1。
问题
电话ssh
就挂断了,我只剩下一个空终端,它不接受SIGINT
(Ctrl+ C),我必须退出终端并再次打开它才能使用它。
据我所知,这可能是私钥的权限问题。目前其权限为600
.将其更改为644
会出现权限过于开放的错误并退出ssh
尝试。有什么建议吗?
答案1
为此
ssh_config
,您可以指定主机别名和密钥并将其存储,而无需创建诸如 bash 脚本之类的 hara-kiri。它基本上~/.ssh/config
以这种格式存储在您的中:Host host1 Hostname 000.000.000.000 User user IdentityFile /path/to/key.pem
然后你可以简单地打电话
ssh host1
到达,得到
000.000.000.000
如果你真的想成为有效的并且有更短的快捷方式,bash
alias
比 bash 脚本更合适。alias access="ssh -i /path/to/key.pem [email protected]"
如果您确实想使用 bash 脚本,则需要使用以下
-tt
选项强制 ssh 在远程服务器上分配 TTY:ssh -tti /path/to/key.pem [email protected]
有关更多提示,您可以浏览ssh
和 的手册页ssh_config
。
答案2
我通常在服务器上提供密码身份验证(通过控制台,假设您正在使用虚拟化),然后ssh-copy-id soandso@server
进行基于密钥的身份验证。请注意,在大多数情况下,您使用公钥(在您的计算机上)根据私钥(在远程服务器上)进行身份验证。
公钥标准权限应该是,但是据我所知,644
您的私钥应该是。700
您确定您的问题不是 pub key 权限吗?
我建议检查两件事:首先,尝试上面执行的 ssh 连接字符串,然后添加 -v 或 -vvv 作为您的选项。这应该能让你清楚地知道问题出在哪里。其次,查看/etc/ssh/sshd_config
服务器上的 sshd 配置文件 ( ),并确保您尝试使用的连接协议已启用。这可能很简单,只需确保这两行设置为 yes 即可:
RSAAuthentication yes PubkeyAuthentication yes
祝你好运!