Linux下通过SSH实现服务器间简单的分发文件与执行命令
文章目录
[隐藏]
- SSH介绍
- SSH的操作命令
- 实现SSH密钥批量分发
- 非交互式生成密钥并实现批量管理
- 1、为所有机器创建传输用用户及密码
- 2、管理机创建密钥对
- 3、分发密钥
- 4、此处需要三个脚本实现
SSH介绍
SSH服务由服务端软件OpenSSH(openssl)和客户端(常见的有SSH(linux),SecureCRT,xshell,Putty)组成,SSH服务默认使用22端口提供服务,它有两个不兼容的SSH协议版本,分别是1.x和2.x.
SSH 1.x协议存在被黑客针对联机的Key pair插入恶意程序代码的风险,而SSH 2.x针对这个问题,多加了一个确认联机正确性的Diffie-Hellman机制,每次数据传输中,都会以该机制检查输出来源是否正确.
SSH的服务认证类型主要分为:
- 基于口令的安全认证
- 基于密钥的安全认证:首先建立一对密钥对,把公钥(public key)放在需要访问的目标服务器上.另外还需要吧私有密钥(private key)放到SSH的客户端或对应的客户端服务器上.
SSH的操作命令
SSH连接其他服务器
ssh -p22 [email protected] #被连接的主机
SSH通过远程连接执行命令
ssh -p22 [email protected] /sbin/ifconfig eht0
ssh 链接主机记录信息位置
~/.ssh/known_hosts
ssh客户端文件拷贝至远端服务器
可以通过 -l 参数限制传输速度.
scp -P22 -rp /tmp/oldboy [email protected]:/tmp/oldboy #方向由左至右
sftp功能?(不要用)
sftp无法显示登陆用户的目录,可以随时跳到别的目录
sftp -oPort=55555 [email protected] get(download) put(upload)
实现SSH密钥批量分发
#确认系统版本信息 cat /etc/redhat-release uname -r uname -m #添加批量分发账号 useradd fenfa (所有计算器创建分发账号) echo 123456|passwd --stdin fenfa #分发账号需要sudo授权rsync echo "fenfa ALL=(ALL) NOPASSWD: /usr/bin/rsync" >>/etc/sudosers visudo -c #生成密钥对 ssh-keygen -t dsa #查看密钥对 ls -l .ssh/ #分发密钥 ssh-copy-id -i .ssh/id_dsa.pub "-p [email protected]" #测试 ssh -p55555 [email protected] /sbin/ifconfig
增量,加密传输文件:
rsync -avz hosts -e 'ssh -p55555' [email protected]:~
简单文件批量分发脚本(有待修改)
#!/bin/sh . /etc/init.d/functions if [ $# -ne 2 ] then echo "USAGE:/bin/sh $0 localfile remotedir" exit 1 fi for n in 1 2 3 do scp -P55555 -r ~/$1 [email protected].$n:~ &>dev/null && ssh -p55555 -t [email protected].$n sudo rsync ~/$1 $2 &>/dev/null if [ $? -eq 0 ] then action "fenfa $1 192.$n is ok" /bin/true else action "fenfa $1 192.$n is false" /bin/false fi done
简单的批量查看脚本
#!/bin/sh if [ $# -ne 1 ] then echo "USAGE:$0 COMMAND" exit 1 fi for n in 1 2 3 do echo ============192.168.117.$n======== ssh -p55555 [email protected].$n $1 done
非交互式生成密钥并实现批量管理
1、为所有机器创建传输用用户及密码
useradd key888 echo 123456|passwd --stdin key888 id key888 echo "key888 ALL=(ALL) NOPASSWD: ALL" >>/etc/sudoers visudo -c su - key888
2、管理机创建密钥对
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1
3、分发密钥
yum install expect -y #只安装在管理机 ssh-copy-id -i.ssh/id_dsa.pub "-p 52113 [email protected]"
4、此处需要三个脚本实现
fenfa_auto.sh
ssh_expect.exp
~/intall.sh
vi ssh_expect.exp
#!/usr/bin/expect if { $argc != 2 }{ send_user "usage: expect ssh_expect.exp file hostn" exit } #define var set file [lindex $argv 0] set host [lindex $argv 1] set password "123456" #spawn scp /etc/hosts [email protected]:/etc/hosts #spawn scp -P55555 $file kendally@$host:$dirn spawn ssh-copy-id -i $file "-p 55555 key888@host" expect { "yes/no" {send "yes/r";exp_continue} "*password"{send "$passwordr"} } expect eof exit -onexit { send_user "kendall say good bye to you!n" } #script usage #expect kendall-6.exp file host #expaple #expect ssh_expect.exp file host #expect ssh_expect.exp ~/.ssh/id_dsa.pub 172.16.1.31
vi fenfa_auto.sh
#!/bin/sh . /etc/init.d/functions shh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1 if [ $? -eq 0 ];then action "ccreat dsa $ip" /bin/true else action "create dsa $ip" /bin/false exit 1 fi for ip in 8 31 41 do expect ssh_expect.exp ~/.ssh/id_dsa.pub 172.16.1.$ip >dev/null 2>&1 if [ $? -eq 0 ];then action "$ip" /bin/true else action "$ip" /bin/false fi done #dis fenfa scripts for m in 8 31 41 do scp -P55555 -rp ~/scripts [email protected].$m:~ done #install service for n in 8 31 41 do ssh -t -p55555 [email protected].$n sudo /bin/bash ~/scripts/install.sh done
vim intall.sh
yum install httpd -y
原文出处:summerspacestation -> http://www.summerspacestation.com/linux%E4%B8%8B%E9%80%9A%E8%BF%87ssh%E5%AE%9E%E7%8E%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%97%B4%E7%AE%80%E5%8D%95%E7%9A%84%E5%88%86%E5%8F%91%E6%96%87%E4%BB%B6%E4%B8%8E%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4/
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。