无法通过 Bash 脚本使用私钥进行 SSH

无法通过 Bash 脚本使用私钥进行 SSH

首先,如果这是一个非常明显/微不足道的问题,我深表歉意,我仍在学习 linux/unix 的来龙去脉。

我使用一些需要通过 ssh 和私钥访问才能登录的服务器。所以,命令是这样的:

ssh -i /path/to/key.pem [email protected]

我创建了一个 bash 脚本,让我可以使用自己的调用,access并且只有一个基本的 switch 语句用于后面的参数来控制我登录到哪个服务器。例如,access server1将发出适当的ssh命令来登录 server1。

问题

电话ssh就挂断了,我只剩下一个空终端,它不接受SIGINTCtrl+ C),我必须退出终端并再次打开它才能使用它。

据我所知,这可能是私钥的权限问题。目前其权限为600.将其更改为644会出现权限过于开放的错误并退出ssh尝试。有什么建议吗?

答案1

  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

  2. 如果你真的想成为有效的并且有更短的快捷方式,bashalias比 bash 脚本更合适。

    alias access="ssh -i /path/to/key.pem [email protected]"
    
  3. 如果您确实想使用 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

祝你好运!

相关内容