linux 执行远程linux上的shell脚本或者命令以及scp 上传文件到ftp--免密码登陆
场景:在linux A 上执行Linux B上的shell脚本和命令
步骤1.设置ssh免登陆
1.SSH无密码登录
# 本地服务器执行(A机器):生成密钥对
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cp ~/.ssh/id_dsa.pub authorized_keys
如果有邮箱的话,使用
ssh-keygen -t rsa -C anl@163.com
cat ~/.ssh/id_rsa.pub
然后使用winscp或者fileziall之类的文件传输,将authorized_keys上传到B上
# 远程服务器执行(B机器):用公钥给远程机器授权,首先需要将本地公钥拷贝到远程服务器上,远程机器授权全后,可以删除公钥
cat authorized_keys >> ~/.ssh/authorized_keys
操作完以后,A机器就可以无密码SSH到B机器上了
步骤2.执行具体命令
ssh root@192.168.56.2 "sh /root/test.sh"
另外免密码登陆还有以下两种方式:
方法1:sshpass
(1)安装sshpass:
unbuntu系统:apt-get install sshpass
centos系统:
方法1:
cd mytools_tmp/
wget http://download.opensuse.org/repositories/home:Strahlex/CentOS_CentOS-6/home:Strahlex.repo
yum install sshpass
或者方法2:curl -O -L http://downloads.sourceforge.net/project/sshpass/sshpass/1.05/sshpass-1.05.tar.gz && tar xvzf sshpass-1.05.tar.gz && cd sshpass-1.05 && ./configure && make && sudo make install
或者方法3:
wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
yum --enablerepo=epel -y install sshpass
mac 系统:
brew install https://raw.github.com/eugeneoden/homebrew/eca9de1/Library/Formula/sshpass.rb
(2)使用sshpass 和scp复制文件到ftp,比如ftp的用户名为test,密码123456
sshpass -p "123456" scp -v files.zip $ftp_server/$ftp_pass
此处需要说到一点,一个我遇到的问题:我在jenkins slave的mac机器上安装了sshpass,在mac机上执行sshpass 和scp传文件是没有问题的,但是我在jenkins master的centos系统上,调用位于jenkins slave机器上(Mac机)的sshpass就会提示命令找不到 !!!! 如何解决这个问题呢? 方法是:在jenkins slave 的mac机器上使用which sshpass查找sshpass命令的路径,比如我的显示的是/usr/local/bin/sshpass, 那么调用时直接写这个路径(换句话,就是设置到环境变量中,调用时提前执行source 环境变量文件)
方法2:使用expect 脚本来自动输入密码
该方式主要是为了截获界面输出,expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动输入密码然后确认的任务。有了这个工具,定义在scp过程中可能遇到的情况,然后编写相应的处理语句,就可以自动地完成scp操作了。
(1)设置脚本expect_scp脚本,传入参数包含:主机 用户名 密码 源文件路径 目的文件路径
#!/usr/bin/expect
set timeout 10
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]
spawn scp $src_file $username@$host:$dest_file
expect {
"(yes/no)?"
{
send "yes\n"
expect "*assword:" { send "$password\n"}
}
"*assword:"
{
send "$password\n"
}
}
expect "100%"
expect eof
备注:以上脚本第一行,指定了expect的路径,与shell脚本相同,这一句指定了程序在执行时到哪里去寻找相应的启动程序。
如果将以上脚本保存为expect_scp文件,则在shell下执行时需要按以下的规范来输入命令:
./expect_scp 192.168.75.130 root 123456 /root/src_file /root/dest_file
出错解析:
(1)如果出现了报错:
/usr/bin/expect: bad interpreter: No such file or directory
原因时没有安装expect,解决办法如下:
yum install tcl-devel
yum install expect
(2)但是按照上面的脚本,会出现上传文件大小不一致的问题,
解决方法:
set timeout -1
参考:https://blog.csdn.net/ashic/article/details/46914589
备注:以上过程第一次的时候上传文件会上传不上,那是应为没有确认永久添加主机,第一次,先执行下ssh $user@$host,看到询问是否永久添加主机,输入yes,以后就不需要了,如下:

参考:http://blog.csdn.net/nfer_zhuang/article/details/42646849
结束!
linux 执行远程linux上的shell脚本或者命令以及scp 上传文件到ftp--免密码登陆的更多相关文章
- linux系统下重启tomcat的shell脚本
linux系统下重启tomcat的shell脚本: #!/bin/shtomcat_home=/opt/apache-tomcat- #找到tomcat进程的id并kill掉 ps -ef |grep ...
- linux服务器批量部署应用系统shell脚本(Tomcat/jetty)
linux服务器批量部署应用系统shell脚本: 1.请更换代码内的服务器地址(Tomcat或jetty服务器) serverRoot=/home/undoner/java_tool/apache-t ...
- Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法
一.需求背景 因此次项目的生产环境中部署了多套系统,每天会产生大量的日志(数百GB的量),侵占了服务器宝贵的存储资源空间.为了有效缓解服务器存储压力,考虑通过Linux的Shell脚本结合cr ...
- CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存
CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存来自:互联网 时间:2020-03-22 阅读:114以下情况可能造成Linux内存占用过高服务配置存在直接分配错误,或隐性分 ...
- Java代码调用服务器上的Shell脚本
Java代码调用服务器上的Shell脚本 这里主要是因为我们报表平台有用到用户手工录入的数据作为结果数据且需要纳入saiku去展示 如我们所知,saiku不会自动刷新,所以需要在数据更新接口中调用服务 ...
- java调用机器上的shell脚本
java调用机器上的shell脚本,可以这样方便的通过shell脚本调用本机的C.C++等程序 Process process = null; Runtime runTime = Runtime.ge ...
- 用crontab执行shell把top命令按日期追加到文件
用crontab执行shell把top命令按日期追加到文件 详细图文解说请到本人原创百度经验http://jingyan.baidu.com/article/3052f5a1daf11197f21f8 ...
- linux如何配置双机SSH信任然后双向免密码登陆
linux如何配置双机SSH信任然后双向免密码登陆 www.111cn.net 更新:2015-01-14 编辑:edit02_lz 来源:转载 有时为了方便管理多台Linux主机,想实现双机之间信任 ...
- Jenkins进阶系列之——09配置Linux系统ssh免密码登陆
ssh认证的完整描述:https://www.ibm.com/developerworks/cn/linux/security/openssh/part1/ 说明:点我去查看 今天我们只说生成ssh的 ...
随机推荐
- Spring实战 难懂的JavaBean
bean中文解释为:豆; 豆形种子; 毫无价值的东西. 按照上面的意思,很难理解Bean是个什么鬼,Java豆? 我们先来看一个典型的JavaBean,直观地理解下: public class Per ...
- DB2常用函数详解(一):字符串函数
VALUE函数 语法:VALUE(EXPRESSION1,EXPRESSION2) VALUE函数是用返回一个非空的值,当其第一个参数非空,直接返回该参数的值,如果第一个参数为空,则返回第一个参数的值 ...
- ubuntu16.04安装 catkin_tools
参考:https://catkin-tools.readthedocs.io/en/latest/installing.html First you must have the ROS reposit ...
- 如何从视频中分离出音乐,和对音乐做分割,合并的处理(瑞典音乐家-新八宝盒.mp3.rar下载)
点击下载:瑞典音乐家-新八宝盒.mp3.rar 1.工具 Total Video Converter 3.71 视频处理(安装软件,有绿色版的) MP3剪切器 MP3剪切器(小工具) Mp3mateP ...
- 短信文本pdu模式解析
来源于互联网 年代较长 如有侵犯 请联系删除 text模式主要发送字符集(有限的),不能用来发送中文,但是hex moder可以发送所有字符. pdu moder被所有手机支持,主要分为7bit 8b ...
- linux下安装pycharm
在 linux下打开浏览器,搜索pycharm,点击download. 下载好的文件的名称可能是 ‘pycharm-professional-2016.2.3.tar.gz’. 打开终端界面,输入命令 ...
- [No000013D].Net 项目代码风格参考
1. C#代码风格要求 1.1 注释 类型.属性.事件.方法.方法参数,根据需要添加注释. 如果类型.属性.事件.方法.方法参数的名称已经是自解释了,不需要加注释:否则需要添加注释. 当添加注释时,添 ...
- Etcd+Confd实现Nginx配置文件自动管理
一.需求 我们使用Nginx做七层负载均衡,后端是Tomcat.项目采用灰度发布方式,每次项目升级,都要手动先从Nginx下摘掉一组,然后再升级这组,当项目快速迭代时,手动做这些操作显然会增加部署时间 ...
- 《Redis 集群》
由于集群这章节内容较多,也比较重要,所以单独拉出来,做一个小章节. 1:如何搭建一个集群? - 环境为 Ubuntu16.04 - 这里我预计使用 9001 - 9006 端口,生成一个 6 台机器的 ...
- 关于swagger-ui 参数为中文的时候,后端乱码
项目中用swagger-ui来测试接口,但是发现,参数是中文的时候,后台接收的时候会出现乱码. 不得改用postman,就没事了, 立贴求助,希望有人可以说下这个怎么配置. 后面发现是后端的编码过滤器 ...