SHELL脚本中su切换用户,执行脚本时如何避免出现密码输入提示??

时间:2022-08-27 15:50:01
在SHELL脚本中切换到另一个用户,想直接将密码也写在脚本中。因为密码输入不能让执行脚本的人来做。而是我事先弄好的。
有什么tool可以实现这个呢

11 个解决方案

#1


可以使用expect 脚本
搜一下,网上很多例子

#2


另外,scp可以不出现密码输入提示信息麽??
scp ./south_db.sql   root@135.252.234.118:~

scp命令是没有密码参数的呢

#3


这些通过expect 脚本都可以实现,expect就是模拟手工交互的过程

例如
#!/usr/bin/expect

set password 123
spawn scp ./south_db.sql root@135.252.234.118:~
expect -nocase "password: "
send "$password\r"
expect eof

#4


引用 2 楼 hardwin 的回复:
另外,scp可以不出现密码输入提示信息麽??
scp ./south_db.sql   root@135.252.234.118:~

scp命令是没有密码参数的呢

你这是用root的scp 直接用密码还不安全  用expect就把root密码暴露在文件里了

采用无密码公钥认证就ok啦!!
在现在的客户端机器里用ssh-kegen -b 2048 生成密钥对 在要求输入密码的时候直接回车 然后会在你的~/.ssh下生成一个公钥和密钥
即id_rsa,id_rsa.pub  然后chmod 600 ~/.ssh/id_rsa   然后用scp ~/.ssh/id_rsa.pub   root@135.252.234.118:/root/id_rsa.pub
把公钥id_rsa.pub传到服务器上去

接下来是在服务器端135.252.234.118的root用户的设置 
mkidr -p ~/.ssh && chmod 700 ~/.ssh
cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
修改/etc/ssh/sshd_config把
PasswordAuthentication  yes
改成
PasswordAuthentication no
然后重启sshd

好了这下从客户端的root用scp向服务器传东西就不用密码了

#5


引用 4 楼 steptodream 的回复:
引用 2 楼 hardwin 的回复:

另外,scp可以不出现密码输入提示信息麽??
scp ./south_db.sql root@135.252.234.118:~

scp命令是没有密码参数的呢

你这是用root的scp 直接用密码还不安全 用expect就把root密码暴露在文件里了

采用无密码公钥认证就ok啦!!
在现在的客户端机器里用ssh-kegen -b ……


熊猫的这个好专业和安全呀!公司服务器服务不能停。回家上虚拟机上试试去。

#6


熊猫的这个好专业和安全呀!公司服务器服务不能停。回家上虚拟机上试试去
----------------------
我都是用密钥认证的rsync和scp备份的。 只要你操作正确 服务器不会停的 一点事都没有。不过你第一次弄的话 在虚拟机上测试一下是完全之策。

#7


root用户执行脚本时,切换用户不用输密码吧

#8


不输入密码有2种方式
1:expect脚本
2 公钥

#9


引用 7 楼 zaghost 的回复:
root用户执行脚本时,切换用户不用输密码吧

我这里指的是任意用户之间的切换
普通-->root-->mysql-->普通

#10


sudo, setuid

#11


直接用
system "密码"

就ok

#1


可以使用expect 脚本
搜一下,网上很多例子

#2


另外,scp可以不出现密码输入提示信息麽??
scp ./south_db.sql   root@135.252.234.118:~

scp命令是没有密码参数的呢

#3


这些通过expect 脚本都可以实现,expect就是模拟手工交互的过程

例如
#!/usr/bin/expect

set password 123
spawn scp ./south_db.sql root@135.252.234.118:~
expect -nocase "password: "
send "$password\r"
expect eof

#4


引用 2 楼 hardwin 的回复:
另外,scp可以不出现密码输入提示信息麽??
scp ./south_db.sql   root@135.252.234.118:~

scp命令是没有密码参数的呢

你这是用root的scp 直接用密码还不安全  用expect就把root密码暴露在文件里了

采用无密码公钥认证就ok啦!!
在现在的客户端机器里用ssh-kegen -b 2048 生成密钥对 在要求输入密码的时候直接回车 然后会在你的~/.ssh下生成一个公钥和密钥
即id_rsa,id_rsa.pub  然后chmod 600 ~/.ssh/id_rsa   然后用scp ~/.ssh/id_rsa.pub   root@135.252.234.118:/root/id_rsa.pub
把公钥id_rsa.pub传到服务器上去

接下来是在服务器端135.252.234.118的root用户的设置 
mkidr -p ~/.ssh && chmod 700 ~/.ssh
cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
修改/etc/ssh/sshd_config把
PasswordAuthentication  yes
改成
PasswordAuthentication no
然后重启sshd

好了这下从客户端的root用scp向服务器传东西就不用密码了

#5


引用 4 楼 steptodream 的回复:
引用 2 楼 hardwin 的回复:

另外,scp可以不出现密码输入提示信息麽??
scp ./south_db.sql root@135.252.234.118:~

scp命令是没有密码参数的呢

你这是用root的scp 直接用密码还不安全 用expect就把root密码暴露在文件里了

采用无密码公钥认证就ok啦!!
在现在的客户端机器里用ssh-kegen -b ……


熊猫的这个好专业和安全呀!公司服务器服务不能停。回家上虚拟机上试试去。

#6


熊猫的这个好专业和安全呀!公司服务器服务不能停。回家上虚拟机上试试去
----------------------
我都是用密钥认证的rsync和scp备份的。 只要你操作正确 服务器不会停的 一点事都没有。不过你第一次弄的话 在虚拟机上测试一下是完全之策。

#7


root用户执行脚本时,切换用户不用输密码吧

#8


不输入密码有2种方式
1:expect脚本
2 公钥

#9


引用 7 楼 zaghost 的回复:
root用户执行脚本时,切换用户不用输密码吧

我这里指的是任意用户之间的切换
普通-->root-->mysql-->普通

#10


sudo, setuid

#11


直接用
system "密码"

就ok