通过 ssh 运行脚本时权限被拒绝

通过 ssh 运行脚本时权限被拒绝

我编写了一个脚本,通过下载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,它将始终提示您输入密码。

相关内容