以root用户身份使用SSHlogin到远程计算机

我的问题是类似于这个 ,我试图自动化的地方,我可以访问远程机器,并作为超级用户运行一个命令。 它工作正常,直到它login,就像从这里: –

$ ssh-keygen -t rsa -b 2048 

 $ ssh-copy-id id@server id@server's password: $ ssh id@server id@server:~$ 

我的开销是我可以要求用户远程机器的密码只有一次(而生成SSH密钥),之后,当作为超级用户运行一个命令,它不应该再次要求密码即它不应该需要像下面:-

sudo su

有什么办法可以做到吗? 因为我试图将密码保存为variables,然后将值replace为: –

 echo -n "Enter password > " read passwd sshpass -p $username ssh -o StrictHostKeyChecking=no $username@$server sudo some_application & 

它会提示input密码,我不能代替我声明的variables的值。

你有没有尝试过使用expect

简单的login脚本写在期望:

 #!/usr/bin/expect set timeout 9 set username [lindex $argv 0] set password [lindex $argv 1] set hostname [lindex $argv 2] log_user 0 if {[llength $argv] == 0} { send_user "Usage: scriptname username \'password\' hostname\n" exit 1 } send_user "\n#####\n# $hostname\n#####\n" spawn ssh -q -o StrictHostKeyChecking=no $username@$hostname expect { timeout { send_user "\nFailed to get password prompt\n"; exit 1 } eof { send_user "\nSSH failure for $hostname\n"; exit 1 } "*assword" } send "$password\r" expect { timeout { send_user "\nLogin failed. Password incorrect.\n"; exit 1} "*\$ " } send_user "\nPassword is correct\n" send "exit\r" close 

使用示例:

 ./script_name user_foo pass_bar hostname.com 

它只会尝试login你,并给出任何错误信息,如果出现错误,如果不是,它会说“密码是正确的”,然后退出会话。

一些参数将在您所接受的系统上消失。 另外,使用expect可以知道login和执行命令时的输出结果。

本教程将涵盖您的需求

你真的把你的pub key复制到root的.ssh / authorized_keys文件吗? 之后我总是做“chmod -R go = /root/.ssh”,同时检查所有权。

如果你已经运行了selinux,你必须在authorized_keys文件和.ssh目录下“restorecon”。

如果你想以root身份login,你需要检查/ etc / ssh / sshd_config并重新加载sshd。