Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过ssh实现sudo的正确方法_Ssh_Sudo - Fatal编程技术网

通过ssh实现sudo的正确方法

通过ssh实现sudo的正确方法,ssh,sudo,Ssh,Sudo,我有一个脚本,它使用sudo在远程服务器上通过SSH运行另一个脚本。但是,当我键入密码时,它会显示在终端上。(否则可以正常工作) 正确的方法是什么,这样我就可以通过SSH键入sudo的密码,而不必像我键入的那样显示密码?NOPASS在目标机器上的配置中就是解决方案。继续阅读目标机器上的配置中的NOPASSNOPASS,这是解决方案。继续阅读另一种方法是使用-t开关切换到ssh: ssh -t user@server "sudo script" 见: 另一种方法是使用-t开关切换到ssh: ss

我有一个脚本,它使用sudo在远程服务器上通过SSH运行另一个脚本。但是,当我键入密码时,它会显示在终端上。(否则可以正常工作)


正确的方法是什么,这样我就可以通过SSH键入sudo的密码,而不必像我键入的那样显示密码?

NOPASS
在目标机器上的配置中就是解决方案。继续阅读目标机器上的配置中的NOPASS

NOPASS
,这是解决方案。继续阅读另一种方法是使用
-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