场景:在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--免密码登陆的更多相关文章

  1. linux系统下重启tomcat的shell脚本

    linux系统下重启tomcat的shell脚本: #!/bin/shtomcat_home=/opt/apache-tomcat- #找到tomcat进程的id并kill掉 ps -ef |grep ...

  2. linux服务器批量部署应用系统shell脚本(Tomcat/jetty)

    linux服务器批量部署应用系统shell脚本: 1.请更换代码内的服务器地址(Tomcat或jetty服务器) serverRoot=/home/undoner/java_tool/apache-t ...

  3. Linux定时对日志批量打包Shell脚本及定时任务crontab 详细用法

    一.需求背景     因此次项目的生产环境中部署了多套系统,每天会产生大量的日志(数百GB的量),侵占了服务器宝贵的存储资源空间.为了有效缓解服务器存储压力,考虑通过Linux的Shell脚本结合cr ...

  4. CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存

    CentOS/Linux内存占用大,用Shell脚本自动定时清除/释放内存来自:互联网 时间:2020-03-22 阅读:114以下情况可能造成Linux内存占用过高服务配置存在直接分配错误,或隐性分 ...

  5. Java代码调用服务器上的Shell脚本

    Java代码调用服务器上的Shell脚本 这里主要是因为我们报表平台有用到用户手工录入的数据作为结果数据且需要纳入saiku去展示 如我们所知,saiku不会自动刷新,所以需要在数据更新接口中调用服务 ...

  6. java调用机器上的shell脚本

    java调用机器上的shell脚本,可以这样方便的通过shell脚本调用本机的C.C++等程序 Process process = null; Runtime runTime = Runtime.ge ...

  7. 用crontab执行shell把top命令按日期追加到文件

    用crontab执行shell把top命令按日期追加到文件 详细图文解说请到本人原创百度经验http://jingyan.baidu.com/article/3052f5a1daf11197f21f8 ...

  8. linux如何配置双机SSH信任然后双向免密码登陆

    linux如何配置双机SSH信任然后双向免密码登陆 www.111cn.net 更新:2015-01-14 编辑:edit02_lz 来源:转载 有时为了方便管理多台Linux主机,想实现双机之间信任 ...

  9. Jenkins进阶系列之——09配置Linux系统ssh免密码登陆

    ssh认证的完整描述:https://www.ibm.com/developerworks/cn/linux/security/openssh/part1/ 说明:点我去查看 今天我们只说生成ssh的 ...

随机推荐

  1. php实现简单消息发送+极光推送系统

    前几天刚写完的一个东西,写的比较简单,没有使用其他插件,原生php+计划任务实现 极光推送的代码 /* $receiver="registration_id" : [ " ...

  2. [No0000183]Parallel Programming with .NET-How PLINQ processes an IEnumerable<T> on multiple cores

    As Ed Essey explained in Partitioning in PLINQ, partitioning is an important step in PLINQ execution ...

  3. [No0000167]CPU内部组成结构及指令执行过程

    计算机的基本硬件系统由运算器.控制器.存储器和输入.输出设备五大部件组成.运算器和控制器等部件被集成在一起统称为中央处理单元(Central Processing Unit,CPU). CPU的功能 ...

  4. 2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算

    2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算 需求分析: 支持整数,可进行多运算符运算,有优先级. 设计思路: 在有括号的情况下,先计算得出括号中的结果,如 ...

  5. 使用axios加入进度条

    思路:(安慰剂按钮)首先当触发按钮时,设置拦截器,启动进度条从0开始到100满(html进度条用数值value来控制,默认为0),设置进度条的配置函数然后在后端返回函数中启动停止精度条的函数,为了保持 ...

  6. postman客户端的安装与使用

    安装 首先下载蓝灯,为FQ做准备 登录github,输入https://github.com/getlantern/lantern,找到下载链接下载 安装并成功启动蓝灯 登录谷歌浏览器的应用市场,搜索 ...

  7. 用promise和async/await分别实现红绿灯

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. schtasks 命令使用

    schtasks  /create 创建任务,下面是常用参数 /tn taskname /tr taskrun /sc schedule    [Minute | Hourly | Daly | We ...

  9. monitor

    // ==UserScript== // @name Page Monitor // @namespace http://tampermonkey.net/ // @version 0.1 // @d ...

  10. 【Loadrunner】Loadrunner 手动关联技术

    Loadrunner 手动关联技术 录制成功,回放失败,怀疑和动态数据有关: 1 重新录制一份脚本,两次录制的脚本进行比对,确定动态数据,复制动态数据: 2  找到第一次产生该动态数据的响应对应的相应 ...