ssh怎么执行需要sudo提权shell脚本

发布时间:2020-12-29编辑:脚本学堂
有关ssh连接远程服务器时,执行需要要sudo提权脚本的解决方法,执行远程服务器需要sudo权限的脚本,感兴趣的朋友参考下。

ssh怎么执行需要sudo提权shell/ target=_blank class=infotextkey>shell脚本

有文章建议修改/etc/sudoers,然后nopasswd:指定的cmd,没有远程虚拟终端自然无法操作,ubuntu10.04 server测试无效。

ssh执行远程操作
命令格式:
 

ssh -p $port $user@$p 'cmd'  

$port : ssh连接端口号 
$user: ssh连接用户名 
$ip:ssh连接的IP地址 
cmd:远程服务器需要执行的操作 

准备工作
基于公私钥认证或者用户名密码认证能确保登录到远程local2服务器(有点基本运维知识的人做这个事情都不是问题)
cmd如果是脚本,注意绝对路径问题(相对路径在远程执行时就是坑)

缺点:
此命令可以满足大多数的需求,但是通常运维部署时需要root权限,但是有几处限制:
1、远程服务器local2禁止root用户登录
2、在远程服务器脚本里转换身份用expect需要send密码,这样不够安全
3、执行远程服务器需要sudo权限的脚本

ssh的-t参数
 

-t  Force pseudo-tty allocation.  This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services.  Multiple -t options force tty allocation, even if ssh has no local tty. 

中文翻译:
可以提供一个远程服务器的虚拟tty终端,加上这个参数即可在远程服务器的虚拟终端上输入提权密码了,非常安全。

命令格式
 

ssh -t -p $port $user@$ip  'cmd' 

shell脚本
 

复制代码 代码示例:
#!/bin/bash 
#
#变量定义 
ip_array=("192.168.1.1" "192.168.1.2" "192.168.1.3") 
user="test1" 
remote_cmd="/home/test/1.sh" 
 
#本地通过ssh执行远程服务器的脚本 
for ip in ${ip_array[*]} 
do 
    if [ $ip = "192.168.1.1" ]; then 
        port="7777" 
    else 
        port="22" 
    fi 
    ssh -t -p $port $user@$ip "remote_cmd" 
done 

-t虚拟出一个远程服务器的终端,在多台服务器同时部署时,节约时间。