我编写了一个脚本,通过下载scp
并安装一些软件包。 SSH 密钥被添加到主机,当我运行时
[root@HostB ~]# ./myscript
一切正常,软件包通过 scp 下载,无需输入密码。
我需要通过运行这个脚本,ssh
但是当我尝试时
[root@HostA ~]# ssh root@HostB "./myscript"
我收到权限被拒绝(公钥,密码)错误。
当我尝试使用时,当myscript 中的命令执行ssh -t
时,我会收到密码查询。scp
答案1
答案=添加“bash”
如何通过 SSH 连接到计算机并从 Jenkinsfile 执行脚本:该文件在目录“/home/username/Shell Script Directory”中称为“Shell Script.sh”
来自詹金斯文件:
sh "sudo ssh -i /home/user/myPemFile.pem -o StrictHostKeyChecking=no -n [email protected] \"bash /home/username/Shell\\ Script\\ Directory/Shell\\ Script.sh\" "
答案2
我的猜测是因为你没有PasswordAuthentication
设置为“是”。
PasswordAuthentication yes
将其添加到sshd_config
机器上并重试。这应该提示输入密码。
另一种解决方案是获取 HostA 上的内容并将其添加到HostB 上的~/.ssh/id_rsa.pub
文件中~/.ssh/authorized_keys
现在您已启用密码身份验证,您可以使用以下命令安装授权密钥:
ssh-copy-id HostB
答案3
您提到您正在scp
脚本内部使用来下载软件包。你的问题就出在这一点上。问题是,当您以这种形式运行 ssh 时:
ssh user@host command
...没有分配给正在运行的脚本的伪终端。scp
尝试提示输入密码,但它需要一个伪终端,因此如果没有伪终端,您将收到权限被拒绝的错误(这是来自密码身份验证尝试失败)。如果您使用ssh -t
,则有一个伪终端,并且密码提示有效。您需要弄清楚为什么scp
在远程运行时提示输入密码,而在从交互式 ssh 会话运行时则不提示输入密码。这是一个不同的问题。
答案4
听起来它仍然要你输入密码。当您从 HostA SSH 到 HostB 时,是否要求输入密码?
如果是这样,您将需要更改您的ssh_config
文件(/etc/ssh/sshd_config
在 RHEL/Centos 上)以包含:
PasswordAuthentication no
如果PasswordAuthentication
设置为 yes,它将始终提示您输入密码。