Jes*_*ebb 206
对于sudo,有一个-S选项用于接受标准输入的密码.这是男人的入口:
-S The -S (stdin) option causes sudo to read the password from
the standard input instead of the terminal device.
Run Code Online (Sandbox Code Playgroud)
这将允许您运行如下命令:
echo myPassword | sudo -S ls /tmp
Run Code Online (Sandbox Code Playgroud)
至于ssh,我已经做了很多尝试来自动化/编写它的用法并没有成功.似乎没有任何内置方法可以在没有提示的情况下将密码传递给命令.正如其他人所提到的," 期望 "实用程序似乎旨在解决这一难题,但最终,设置正确的私钥授权是尝试自动化时的正确方法.
mla*_*bie 36
我写了一些Applescript,它通过对话框提示输入密码,然后构建一个自定义bash命令,如下所示:
echo <password> | sudo -S <command>
Run Code Online (Sandbox Code Playgroud)
我不确定这是否有帮助.
如果sudo接受了预先加密的密码,那就太好了,所以我可以在我的脚本中加密它,而不用担心回复明文密码.然而,这适用于我和我的情况.
小智 26
对于ssh
您可以使用sshpass
:sshpass -p yourpassphrase ssh user@host
.
你只需要先下载sshpass :)
$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server
Run Code Online (Sandbox Code Playgroud)
小智 12
我有:
ssh user@host bash -c "echo mypass | sudo -S mycommand"
Run Code Online (Sandbox Code Playgroud)
适合我.
Jah*_*hid 11
对于sudo,你也可以这样做:
sudo -S <<< "password" command
Run Code Online (Sandbox Code Playgroud)
Byo*_*ob 10
这可以通过在要连接的目标主机上设置公钥/私钥来完成.第一步是通过执行以下命令为在本地主机上运行脚本的用户生成一个ssh密钥:
ssh-keygen
Enter file in which to save the key (/home/myuser/.ssh/id_rsa): <Hit enter for default>
Overwrite (y/n)? y
Run Code Online (Sandbox Code Playgroud)
然后输入空白密码.之后,将ssh密钥复制到要连接的目标主机上.
ssh-copy-id <remote_user>@<other_host>
remote_user@other_host's password: <Enter remote user's password here>
Run Code Online (Sandbox Code Playgroud)
注册ssh密钥后,您就可以ssh remote_user@other_host
从本地主机执行静默.
解决此问题的常用方法是设置一个帮助应用程序来执行需要超级用户访问的任务:http: //en.wikipedia.org/wiki/Setuid
Sudo不打算脱机使用.
稍后编辑:SSH可以与私钥 - 公钥验证一起使用.如果私钥没有密码短语,则可以在不提示输入密码的情况下使用ssh.
如果没有更好的选择(正如其他人所建议的那样),那么man socat可以提供帮助:
(sleep 5; echo PASSWORD; sleep 5; echo ls; sleep 1) |
socat - EXEC:'ssh -l user server',pty,setsid,ctty
EXEC’utes an ssh session to server. Uses a pty for communication
between socat and ssh, makes it ssh’s controlling tty (ctty),
and makes this pty the owner of a new process group (setsid), so
ssh accepts the password from socat.
Run Code Online (Sandbox Code Playgroud)
所有的pty,setsid,ctty复杂性都是必要的,虽然你可能不需要长时间睡眠,但你需要睡觉.echo = 0选项也值得一看,就像在ssh的命令行上传递远程命令一样.
也许您可以使用expect
命令?:
expect -c 'spawn ssh root@your-domain.com;expect password;send "your-password\n";interact
Run Code Online (Sandbox Code Playgroud)
该命令会自动提供密码。