共计 1495 个字符,预计需要花费 4 分钟才能阅读完成。
在之前,看到大都是说修改 /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 权限,但是有几处限制:
- 远程服务器 local2 禁止 root 用户登录
- 在远程服务器脚本里转换身份用 expect 需要 send 密码,这样不够安全
执行远程服务器需要 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’
示例脚本
#!/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 虚拟出一个远程服务器的终端,在多台服务器同时部署时确实节约了不少时间啊!
CentOS 6.0 下 SSH 免密码登录配置 http://www.linuxidc.com/Linux/2013-03/80488.htm
提高 Ubuntu 的 SSH 登陆认证速度的办法 http://www.linuxidc.com/Linux/2014-09/106810.htm
开启 SSH 服务让 Android 手机远程访问 Ubuntu 14.04 http://www.linuxidc.com/Linux/2014-09/106809.htm
如何为 Linux 系统中的 SSH 添加双重认证 http://www.linuxidc.com/Linux/2014-08/105998.htm
在 Linux 中为非 SSH 用户配置 SFTP 环境 http://www.linuxidc.com/Linux/2014-08/105865.htm
Linux 上 SSH 服务的配置和管理 http://www.linuxidc.com/Linux/2014-06/103627.htm
SSH 入门学习基础教程 http://www.linuxidc.com/Linux/2014-06/103008.htm