我编写了一个小型 bash 脚本,它接受两个参数:目标 IP 地址和密码,然后调用如下命令:
sshpass -p "$PASSWORD" ssh -p 2022 "username@$DESTINATION" -t -o StrictHostKeychecking=no -o RemoteCommand="systemctl stop watchdog"
但是由于需要 sudo 权限,系统仍然要求我再次输入密码systemctl
。为什么系统没有sshpass
处理这个问题?
我编写了一个小型 bash 脚本,它接受两个参数:目标 IP 地址和密码,然后调用如下命令:
sshpass -p "$PASSWORD" ssh -p 2022 "username@$DESTINATION" -t -o StrictHostKeychecking=no -o RemoteCommand="systemctl stop watchdog"
但是由于需要 sudo 权限,系统仍然要求我再次输入密码systemctl
。为什么系统没有sshpass
处理这个问题?
sshpass
命令不处理访问权限。它仅处理需要密码的sudo
初始ssh
连接,以便在非交互式 shell 中提供密码。来自:man sshpass
systemctl stop watchdog
需要“用户名”执行权限提升(管理员访问)。对于您需要的,您应该使用:
但是你需要确保“用户名”
sudo
在远程$DESTINATION
机器上具有权限。你可以使用以下命令进行检查:然后在文件中添加:
1注意,您可以使用带有 ssh 代理的证书身份验证来避免使用
sshpass
可能导致安全问题的方法。根据@user2747390 的回答,我尝试
sshpass
为目标机器添加另一个(我必须先安装它):这失败了,因为碰巧密码
%F
中包含一个(即使密码在引号中)并且命令尝试解析它,所以我得到:我最终通过删除解决了这个问题
-o RemoteCommand=
(我不记得为什么我首先使用它):