这是我第一次使用 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
这里有两件事:
使用
~/.ssh/authorized_keys
at[email protected]
远程登录,无需交互式密码,而不是在客户端计算机的命令行上输入密码。这也将允许作业通过 cron 或其他方式自动运行。/etc/sudoers
在远程机器上进行配置74.11.11.11
,以允许正在连接的用户以 root 用户身份执行命令,在本例中为:username
。
因此,在您的示例中,/etc/sudoers
on74.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 密钥来完成这项工作,然后将其删除。