我正在运行一些非交互式 ssh 命令。ssh 身份验证可以通过 ssh 代理顺利完成,但如果我运行需要 sudo 的命令,则终端中的密码提示是纯文本。例如:
ssh remotemachine "sudo -u www mkdir -p /path/to/new/folder"
将提示我以纯文本形式输入密码。有人知道我如何让它使用正常的安全提示,或者我可以通过开关传递密码吗?(这样我就可以在发送命令之前在此侧设置安全提示)
任何帮助深表感谢。
答案1
使用ssh -t
:
人SSH
-t Force pseudo-tty allocation. This can be used to execute arbitrary
screen-based programs on a remote machine, which can be very useful,
e.g. when implementing menu services. Multiple -t options force tty
allocation, even if ssh has no local tty.
所以你的命令将是
ssh remotemachine -t "sudo -u www mkdir -p /path/to/new/folder"
如果您不想输入密码,您可以(如果允许的话)sudoers
使用命令进行修改visudo
。
添加参数NOPASSWD:
,例如
username ALL=(ALL) NOPASSWD: /bin/mkdir
如果您无法编辑 /etc/sudoers,您可以使用sudo -S
:
男人须藤
-S The -S (stdin) option causes sudo to read the password from
the standard input instead of the terminal device. The
password must be followed by a newline character.
这样,命令就是
echo "your_password" | ssh remotemachine -t \
"sudo -S -u www mkdir -p /path/to/new/folder"
请记住,这会将您的密码添加到您的 shell 的命令历史记录中(对于 bash,这将是~/.bash_history
文件)。