在 su 命令期间调用时如何隐藏密码?

在 su 命令期间调用时如何隐藏密码?

这是我第一次使用 su 命令,它实际上在终端上显示密码并且不会保持隐藏状态。这是我的代码片段:

 sshpass -p "password" ssh -q [email protected] "su -lc 'mkdir temp/'"

代码说明:我正在访问远程服务器并尝试在该服务器上以 root 身份创建文件夹。为此,我必须使用 su 命令,它会提示我输入密码。当我输入密码时,它会显示并且不会隐藏。我该如何解决这个问题?

答案1

一般情况下请避免使用 sshpass 和密码。
其他用户可以使用 ps 命令观察您编写的所有内容应该关心你。
第二个问题在这里,我没有看到你指定-t选项。这意味着你有残疾人

Defaults    requiretty

在您的 /etc/sudoers 中,这可能会产生安全隐患。

如果您仍然坚持使用 sshkeypass,请尝试:

sshpass -p "password" ssh -qt [email protected] "su -lc 'mkdir temp/'"

您可以轻松地设置一个生成 ssh 密钥来完成这项工作,然后将其删除。

ssh-keygen -t rsa

按照屏幕上的说明操作,

ssh-copy-id user@server1

或者你也可以这样做:

cat ~/.ssh/id_rsa.pub | ssh user@server1 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

答案2

这里有两件事:

  1. 使用~/.ssh/authorized_keysat[email protected]远程登录,无需交互式密码,而不是在客户端计算机的命令行上输入密码。这也将允许作业通过 cron 或其他方式自动运行。

  2. /etc/sudoers在远程机器上进行配置74.11.11.11,以允许正在连接的用户以 root 用户身份执行命令,在本例中为:username

因此,在您的示例中,/etc/sudoerson74.11.11.11将允许用户username执行mkdir,就像root没有密码一样。

如果您已经尝试过此操作,但它对您不起作用,请运行man sudoers

答案3

除了不使用的建议之外sshpass,还可以将其从命令行中“隐藏”:

  • 编辑/etc/profile并粘贴到那里:
    export SSHPASS='my_pass_here'
    
  • -e将参数与sshpass命令 一起使用
    $ sshpass -e ssh [email protected] 'ls -ll' 
    
  • 另一种选择是将密码保存在不同的文件中并使用参数-f
    $ sshpass -f password_filename ssh [email protected] 'ls -la' 
    

但最好的解决办法是遵循@赫里斯托·穆罕默德 建议:

一般来说,请避免使用带密码的 sshpass。

您可以轻松地设置一个生成 ssh 密钥来完成这项工作,然后将其删除。

相关内容