通过ssh实现sudo的正确方法
我有一个脚本,它使用sudo在远程服务器上通过SSH运行另一个脚本。但是,当我键入密码时,它会显示在终端上。(否则可以正常工作)通过ssh实现sudo的正确方法,ssh,sudo,Ssh,Sudo,我有一个脚本,它使用sudo在远程服务器上通过SSH运行另一个脚本。但是,当我键入密码时,它会显示在终端上。(否则可以正常工作) 正确的方法是什么,这样我就可以通过SSH键入sudo的密码,而不必像我键入的那样显示密码?NOPASS在目标机器上的配置中就是解决方案。继续阅读目标机器上的配置中的NOPASSNOPASS,这是解决方案。继续阅读另一种方法是使用-t开关切换到ssh: ssh -t user@server "sudo script" 见: 另一种方法是使用-t开关切换到ssh: ss
正确的方法是什么,这样我就可以通过SSH键入sudo的密码,而不必像我键入的那样显示密码?
NOPASS
在目标机器上的配置中就是解决方案。继续阅读目标机器上的配置中的NOPASSNOPASS
,这是解决方案。继续阅读另一种方法是使用-t
开关切换到ssh
:
ssh -t user@server "sudo script"
见:
另一种方法是使用
-t
开关切换到ssh
:
ssh -t user@server "sudo script"
见:
最好的方法是
ssh-tuser@server“sudo”
,例如ssh-tuser@server“sudo重新启动”
。
它将首先提示用户输入密码,然后提示root(因为我们使用root权限运行脚本或命令)
我希望这有助于消除您的疑虑。最好的方法是
ssh-tuser@server“sudo”
,例如ssh-tuser@server“sudo重新启动”
。
它将首先提示用户输入密码,然后提示root(因为我们使用root权限运行脚本或命令)
我希望这有助于消除您的疑虑。假设您不需要密码提示:
ssh $HOST 'echo $PASSWORD | sudo -S $COMMMAND'
范例
假设不需要密码提示:
ssh $HOST 'echo $PASSWORD | sudo -S $COMMMAND'
范例
我能够使用以下命令完全自动化它:
echo pass | ssh -tt user@server "sudo script"
优点:
- 没有密码提示
- 不会在远程计算机bash历史记录中显示密码
关于安全性:如上所述,运行此命令将在本地bash历史记录上显示您的密码,最好将密码保存在其他文件中,或将all命令保存在.sh文件中并执行。注意:该文件需要具有正确的权限,以便只有允许的用户才能访问它。我可以要完全自动化,请使用以下命令:
echo pass | ssh -tt user@server "sudo script"
优点:
- 没有密码提示
- 不会在远程计算机bash历史记录中显示密码
关于安全性:如上所述,运行此命令将在本地bash历史记录上显示您的密码,最好将密码保存在其他文件中,或将all命令保存在.sh文件中并执行。注意:该文件需要具有正确的权限,以便只有允许的用户才能访问它。Sudo通过SSH传递密码,无需tty: 您可以通过ssh使用sudo,而不必强制ssh使用伪tty(不使用ssh“-t”开关),方法是告诉sudo不需要交互式密码,只需从stdin获取密码即可。您可以通过使用“-S”来实现这一点打开sudo。这会使sudo监听stdin上的密码,并在看到换行符时停止监听 示例1-简单远程命令 在本例中,我们发送一个简单的
whoami
命令:
$ ssh user@server cat \| sudo --prompt="" -S -- whoami << EOF
> <remote_sudo_password>
root
输出表明sudo正在使用
行,然后远程执行的cat将显示额外的行
例如,如果您希望使用ssh将密码传递给特权命令,而不使用命令行,那么这将是有益的
示例3-安装远程VeraCrypt容器
在本示例脚本中,我们通过sudo远程装载VeraCrypt容器,无需任何额外提示文本:
#!/bin/sh
ssh user@server cat \| sudo --prompt="" -S -- "veracrypt --non-interactive --stdin --keyfiles=/path/to/test.key /path/to/test.img /mnt/mountpoint" << EOF
SudoPassword
VeraCryptContainerPassword
EOF
示例2a-没有本地命令行密码的示例2
第二个例子是:
$ cat text_file_with_sudo_password - << EOF | ssh va1der.net cat \| sudo --prompt="" -S -- cat
> Extra line1
> Extra line2
> EOF
Extra line1
Extra line2
$cat text\u file\u和\u sudo\u密码-额外第1行
>额外线路2
>EOF
额外线路1
额外线路2
如果要将整个内容放在脚本中,则无需将密码放在单独的文件中,因为脚本的内容不会出现在您的历史记录中。不过,如果您希望允许不应该看到密码的用户执行脚本,则该文件可能仍然很有用。Sudo over SSH传递密码,无需ttyd:
echo $VAR_REMOTEROOTPASS | ssh -tt -i $PATH_TO_KEY/id_mykey $VAR_REMOTEUSER@$varRemoteHost
echo \"$varCommand\" | sudo bash
您可以通过ssh使用sudo,而不必强制ssh使用伪tty(不使用ssh“-t”开关),方法是告诉sudo不需要交互式密码,只需从stdin获取密码即可。您可以通过使用“-S”来实现这一点打开sudo。这会使sudo监听stdin上的密码,并在看到换行符时停止监听
示例1-简单远程命令
在本例中,我们发送一个简单的whoami
命令:
$ ssh user@server cat \| sudo --prompt="" -S -- whoami << EOF
> <remote_sudo_password>
root
输出表明sudo正在使用
行,然后远程执行的cat将显示额外的行
例如,如果您希望使用ssh将密码传递给特权命令,而不使用命令行,那么这将是有益的
示例3-安装远程VeraCrypt容器
在本示例脚本中,我们通过sudo远程装载VeraCrypt容器,无需任何额外提示文本:
#!/bin/sh
ssh user@server cat \| sudo --prompt="" -S -- "veracrypt --non-interactive --stdin --keyfiles=/path/to/test.key /path/to/test.img /mnt/mountpoint" << EOF
SudoPassword
VeraCryptContainerPassword
EOF
示例2a-没有本地命令行密码的示例2
第二个例子是:
$ cat text_file_with_sudo_password - << EOF | ssh va1der.net cat \| sudo --prompt="" -S -- cat
> Extra line1
> Extra line2
> EOF
Extra line1
Extra line2
$cat text\u file\u和\u sudo\u密码-额外第1行
>额外线路2
>EOF
额外线路1
额外线路2
如果要将整个内容放在脚本中,则无需将密码放在单独的文件中,因为脚本的内容不会出现在您的历史记录中。不过,如果您希望允许不应该看到密码的用户执行脚本,则它可能仍然很有用。在这种情况下,我实际上需要一个密码,并直接键入它显然,这对我不起作用。在这种情况下,我实际上需要一个密码,并直接键入它,所以这对我不起作用
echo $VAR_REMOTEROOTPASS | ssh -tt -i $PATH_TO_KEY/id_mykey $VAR_REMOTEUSER@$varRemoteHost
echo \"$varCommand\" | sudo bash