如果我运行此命令:
ssh user@server 'mysql -u user -p'
当它要求我提供MySQL密码并开始输入时,该密码在屏幕上可见。我该如何预防?如果我登录ssh
并执行MySQL命令,则一切正常。
如果我运行此命令:
ssh user@server 'mysql -u user -p'
当它要求我提供MySQL密码并开始输入时,该密码在屏幕上可见。我该如何预防?如果我登录ssh
并执行MySQL命令,则一切正常。
Answers:
如果提供运行的远程命令,则SSH不会分配tty,因此远程命令无法禁用echo。您可以使用以下-t
选项强制SSH提供tty :
ssh -t user@server 'mysql -u user -p'
等效选项(用于-o
或用于配置文件)为RequestTTY
。我警告不要在config中使用它,因为它会对非交互式命令产生不良影响。
RequestTTY
中man 5 ssh_config
。
如果您可以信任[*]远程计算机的安全性,则可以按照手册的《最终用户密码安全性准则》一章的建议将密码存储在受适当保护的选项文件中,而无需进行通讯ssh
或键入每个密码时间。
具体来说,您可以.my.cnf
在主目录中文件的[client]部分中添加一行:
[client]
password=your_pass
当然,您必须通过以下方式将文件访问模式设置为400或600,以防止您自己以外的任何人无法访问该文件:
chmod 600 ~/.my.cnf
然后,您可以使用类似
ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'
user110971
您帐户的用户名在哪里。
ssh -t
)每当您发送命令ssh
并需要插入输入时都会发生此问题,因为默认情况下ssh
不会分配伪tty。
您可以使用选项强制tty分配-t
(如果需要,甚至可以超过一个):
-t
强制伪tty分配。 这可用于在远程计算机上执行任意基于屏幕的程序,这可能非常有用,例如在实现菜单服务时。 即使ssh没有本地tty,多个
-t
选项也会强制tty分配。
正如你在读这Debian的职位(Jul_11_2008)有关sudo
,这是一个老问题,爱复发:
ssh user@server "sudo ls" password: password
并显示密码
解决方案是强制ssh使用-t标志分配伪tty:
ssh -t user@server sudo ls
[*]如果您可以依靠将密码保留在一个文件中,该文件只有您自己可以访问,并且可以在工作客户端上以root用户身份访问。
如果可以重新启动更改操作系统的远程计算机或删除HDD,则不能认为该计算机是完全安全的...但是在这种情况下,数据库本身将不安全。