java sftp mget_总结三种Shell脚本编程中避免SFTP输入密码的方法

最近编程中用到sftp上传文件,且需要用crontab预设定时上传事件。而sftp不同于ftp,没有提供选项如 -i 可以将密码直接编码进程序。使用sftp指令,会自动请求用户输入密码。

总结一下可以避免sftp输入密码的三种方式:

1. lftp方式

LFTP是一款非常著名的字符界面的文件传输工具。支持FTP、HTTP、FISH、SFTP、HTTPS和FTPS协议。

例子:(本例为下载例子)

#!/bin/sh

HOST=172.16.2.X

USER=kg_sftp

PASS=tnzk4a7w

echo 'Starting to sftp...'

lftp -u ${USER},${PASS} sftp://${HOST} <

cd /kagou/datafile

mget *.*

bye

EOF

echo 'done'

2. expect方式

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。

要使用expect需要预先安装tcl这个东西,然后再安装expect包。

例子:

#!/usr/local/bin/expect -f

#

#procedure to attempt connecting; result 0 if OK, 1 elsewhere

proc connect {passw} {

expect {

'(yes/no)?' {send 'yes/r';exp_continue} #第一次使用SFTP时候会要求输入yes/no

'password:' {send '$passw/r'            #自动输入密码

expect {

'sftp*' {        #检测返回sftp>

return 0

}

}

}

}

# timed out

return 1

}

#read the input parameters

set user [lindex $argv 0]

set passw [lindex $argv 1]

set host [lindex $argv 2]

set location [lindex $argv 3]

set file1 [lindex $argv 4]

#puts 'Am citit:/n';

#puts 'user: $user';

#puts 'passw: $passw';

#puts 'host: $host';

#puts 'location: $location';

#puts 'file1: $file1';

#check if all were provided

if { $user == '' || $passw == '' || $host == '' || $location == '' || $file1 == '' }  {

puts 'Usage: /n'

exit 1

}

#sftp to specified host and send the files

spawn sftp $user@$host

set rez [connect $passw]

if { $rez == 0 } {

send 'cd $location/r'

set timeout -1

send 'put $file1/r'

#send 'ls -l/r'

#send 'quit/r'

#send 'mkdir testsftp/r'

send 'quit/r'

expect eof

exit 0

}

puts '/nCMD_ERR: connecting to server: $host!/n'

exit 1

0

expect也可以用两种形式调用

1   ./my.exp $usr $pwd $host $local $file

2. 代码中直接插入

expect<

...

!

3. (推荐)生成密钥对

因为这种方式不用把密钥卸载程序里,所以更安全

第一步:生成密匙对,我用的是rsa的密钥。使用命令 'ssh-keygen -t rsa'

[user1@rh user1]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/user1/.ssh/id_rsa):

Created directory '/home/user1/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/user1/.ssh/id_rsa.

Your public key has been saved in /home/user1/.ssh/id_rsa.pub.

The key fingerprint is:

e0:f0:3b:d3:0a:3d:da:42:01:6a:61:2f:6c:a0:c6:e7user1@rh.test.com

[user1@rh user1]$

生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。接着会提示输入一个不同于你的password的密码,直接回车,让它空着。

当然,也可以输入一个。(我比较懒,不想每次都要输入密码。) 这样,密钥对就生成完了。

其中公共密钥保存在 ~/.ssh/id_rsa.pub

私有密钥保存在 ~/.ssh/id_rsa

然后改一下 .ssh 目录的权限,使用命令 'chmod 755 ~/.ssh'

[user1@rh user1]$ chmod 755 ~/.ssh

之后把这个密钥对中的公共密钥复制到你要访问的机器上去,并保存为

~/.ssh/authorized_keys

[user1@rh user1]$ scp ~/.ssh/id_rsa.pub rh1:/home/user1/.ssh/authorized_keysuser1@rh1'spassword:

id_rsa.pub                                    100%  228     3.2MB/s   00:00

[user1@rh user1]$

之这样就大功告成了。之后再用ssh scp sftp 之类的访问那台机器时,就不用输入密码

了,用在script上更是方便。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ad域不去用frs_Windows Server 2008搭建AD域控服务器 - 小王同学!

AD域安装过程安装DNS服务器一路下一步这里选安装到这里DNS服务器安装成功&#xff0c;可以在主页面看到我们安装的角色安装DNS服务器后我们需要重启服务器安装AD域服务新增AD域服务角色一路下一步——安装即可两条安装成功提示&#xff0c;重启服务器角色中选择AD域服务&#x…

IE下及标准浏览器下的图片旋转(二)—— Canvas(2)

文章过长&#xff0c;一篇无法保存 IE下及标准浏览器下的图片旋转&#xff08;二&#xff09;—— Canvas&#xff08;1&#xff09; 同样&#xff0c;作为最后&#xff0c;我们使用使用jquery也为canvas写个旋转demo&#xff1a; javascript&#xff1a; $(function () { …

大数据技术 思维导图

learn from 从0开始学大数据&#xff08;极客时间&#xff09;

python 管理windows客户端_在远程windows客户端上执行python脚本

我正在使用paramiko在远程windows服务器上执行命令。我能够执行dir之类的命令并提取输出&#xff0c;但是执行python脚本似乎失败了。不会引发错误消息。在下面是我的代码片段&#xff1a;def ssh_connect(ip,user,pwd):ssh paramiko.SSHClient()ssh.set_missing_host_key_pol…

日期范围 java_JavaJoDA时间-实现日期范围迭代器

这是一些让你开始的东西。你可能会想一想到底是要包容性还是排他性,等等。import org.joda.time.*;import java.util.*;class LocalDateRange implements Iterable{private final LocalDate start;private final LocalDate end;public LocalDateRange(LocalDate start,LocalDat…

win10win键无反应_台式电脑开机主机没反应怎么办 电脑开机主机没反应解决【详解】...

按了开机按钮后我的台式电脑主机还是没反应&#xff0c;怎么办呢?下面由小编给你做出详细的台式电脑开机主机没反应解方式介绍。(此文主要针对台式电脑做介绍)台式电脑开机主机没反应解方式一&#xff1a;拔掉电源线 然后重复的按开机键5-10下 进行放静电操作 然后再插上电源线…

hadoop 单机伪分布式安装步骤

文章目录1. 安装 Java2. 配置SSH无密码登录3. 下载 hadoop4. 配置环境变量5. 报错处理参考环境 Centos7参考&#xff1a;https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.htmlhttps://blog.csdn.net/bingduanlbd/article/details/5187…

Eclipse 为jar包加入 Java Source和Javadoc(如何向Eclipse中导入源码和doc)

: 当我们在MyEclipse中加入Struct&#xff0c;只是引入了jar包&#xff0c;这时使用jar包里面的类&#xff0c;是无法看到源码的&#xff0c;看到的只是这样 是反编译后的一些东西 加入源码 那么如果看到源码呢&#xff0c;就需要导入了 找到这个类对应的jar包&#xff0c;下载…

ppt生成器_小米发布会ppt词云怎么做的

导语在幻灯片中使用文字云或者文字墙是一件非常酷的事情&#xff0c;之前我们看过的很多发布会PPT都有出现文字云设计。利用文字云工具就告别麻烦的排版&#xff0c;让ppt效果更专业&#xff0c;新颖小米发布会ppt 微词云我们先看下几种文字云案例罗振宇《时间的朋友》跨年演讲…

Java实验方法参数传递与递归_4.3类的结构之二:方法(return,重载,可变个数形参,值传递,递归)...

类的设计中&#xff0c;两个重要结构之二&#xff1a;方法* 方法&#xff1a;描述类应该具有的功能。* 比如&#xff1a;Math类&#xff1a;sqrt()\random()\ ..* Scanner类&#xff1a;nextXxx() ..* Arrays类&#xff1a;sort()\binarySearch()\toString()\equals()\..* * 1.…

钢琴块2电脑版_快陪练教师端电脑版下载_快陪练教师端pc版免费下载[在线教学]...

快陪练教师端电脑版是一款钢琴陪练教师的在线教学软件&#xff0c;快陪练教师端电脑版支持语音互动功能。快陪练教师端电脑版可以帮助老师在线教孩子学习钢琴&#xff0c;软件可以让用户清晰地看到学生弹钢琴时的指法&#xff0c;并及时为其纠正不正确的指法&#xff0c;它引入…

LeetCode 1105. 填充书架(DP)

文章目录1. 题目2. 解题1. 题目 附近的家居城促销&#xff0c;你买回了一直心仪的可调节书架&#xff0c;打算把自己的书都整理到新的书架上。 你把要摆放的书 books 都整理好&#xff0c;叠成一摞&#xff1a;从上往下&#xff0c;第 i 本书的厚度为 books[i][0]&#xff0c…

python字符串前面加上序号_简单了解python字符串前面加r,u的含义

这篇文章主要介绍了简单了解python字符串前面加r,u的含义,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下u/U:表示unicode字符串不是仅仅是针对中文, 可以针对任何的字符串&#xff0c;代表是对字符串进行unicod…

java 不重启部署_一篇文章带你搞定SpringBoot不重启项目实现修改静态资源

一、通过配置文件控制静态资源的热部署在配置文件 application.properties 中添加&#xff1a;#表示从这个默认不触发重启的目录中除去static目录spring.devtools.restart.excludeclasspath:/static/**或者使用&#xff1a;#表示将static目录加入到修改资源会重启的目录中来spr…

判断深度学习模型的稳定性_全自动搭建定制化深度学习模型

EasyDL服务自动化生成与部署EasyDL定制化训练和服务平台基于百度业界领先算法&#xff0c;旨在为用户量身定制业务专属AI模型。通过灵活的配置&#xff0c;用户可以将模型发布为公有云API、设备端离线SDK、本地服务器部署包、软硬一体方案等多种输出方式的AI服务。目前&#xf…

Android应用程序消息处理机制(Looper、Handler)分析

文章转载至CSDN社区罗升阳的安卓之旅&#xff0c;原文地址&#xff1a;http://blog.csdn.net/luoshengyang/article/details/6817933 Android应用程序是通过消息来驱动的&#xff0c;系统为每一个应用程序维护一个消息队例&#xff0c;应用程序的主线程不断地从这个消息 队例中…

冒泡排序和选择排序区别_你以为只是简单的排序?(一)

一直在犹豫要不要写排序的文章&#xff0c;因为真的烂大街了。可是一旦细看&#xff0c;还真是很多值的思考的地方&#xff0c;所以还是选择记录一下以下完整代码&#xff0c;均可从这里获取https://github.com/Rain-Life/data-struct-by-go/tree/master/sort排序算法效率分析了…

java hash 分库分表_分库分表方案

摘自&#xff1a;Java技术栈一、数据库瓶颈不管是IO瓶颈&#xff0c;还是CPU瓶颈&#xff0c;最终都会导致数据库的活跃连接数增加&#xff0c;进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是&#xff0c;可用数据库连接少甚至无连接可用。接下来就可以…

verilog设计简易正弦波信号发生器_信号发生器工作原理是什么

信号发生器是指产生所需参数的电气测试信号的仪器。根据信号波形可分为四类&#xff1a;正弦信号、函数&#xff08;波形&#xff09;信号、脉冲信号和随机信号发生器。那么信号发生器工作原理是什么&#xff1f;听听广州荣鑫电子怎么说。信号发生器又称信号源或振荡器&#xf…

LeetCode 1780. 判断一个数字是否可以表示成三的幂的和(位运算)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;如果你可以将 n 表示成若干个不同的三的幂之和&#xff0c;请你返回 true &#xff0c;否则请返回 false 。 对于一个整数 y &#xff0c;如果存在整数 x 满足 y3xy 3^xy3x&#xff0c;我们称这个整数 y 是三的幂…