❶ 如何在shell脚本里使用sftp批量传送文件
如何在shell脚本里使用sftp批量传送文件
主要步骤如下:
1.为运行shell脚本的本地用户生成密钥对
2.将其中的公钥分发到sftp欲登录的远程服务器上
3.编写并以上面的本地用户运行shell脚本
一.生成密钥对
在shell脚本中使用sftp时必须用到密钥对(公钥和私钥).可使用下列方式生成(SSH 2.X版
本),这里本地用户记为:local_user:
$ ssh-keygen –d
屏幕提示:
Generating public/private dsa key pair.
Enter file in which to save the key (/home/local_user/.ssh/id_dsa):
# 按回车保存为: /home/local_user/.ssh/id_dsa,即当前用户local_user的私钥
Enter passphrase (empty for no passphrase):
# 按回车,表示读取密钥时不需要密钥的密码
Enter same passphrase again:
# 确认密钥的密码,必须和上面的输入相同
Your identification has been saved in /home/local_user/.ssh/id_dsa.
# 私钥保存信息
Your public key has been saved in /home/local_user/.ssh/id_dsa.pub.
# 公钥保存信息
The key fingerprint is:
ec:41:e8:08:38:0b:f8:1e:bc:92:98:32:fc:d7:69:7d ...
# 密钥指纹
二.分发公钥
为了使用密钥,必须将公钥分发到欲登录的远程服务器上,这里远程服务器记为remote_hos
t,欲登录的远程用户记为remote_user
1.公钥到欲登录的远程服务器的远程用户的家目录下,例如:
id_dsa.pub到remote_host:/home/remote_user/.ssh/
若目录/home/remote_user/.ssh/不存在,请先创建之.
2.将来的公钥文件改名为authorized_keys
3.修改公钥文件的访问权限
chmod 644 authorized_keys
三.示例
目标:
从远程服务器remote_host:/home/remote_user/data/
传送下列文件到本地计算机的当前目录: /home/local_user/data/:
20050201
20050202
20050203
20050204
20050205
方式1: 批模式
sftp提供了一个选项-b,用于集中存放sftp命令(该选项主要用于非交互模式的sftp).因此
对于上面的目标,可以生成如下的命令文件:
cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit
这里存为: sftp_cmds.txt
说明: get命令前加一个"-"以防止其执行错误时sftp执行过程被终止.
以下为脚本示例:
#!/bin/sh
sftp -b ./sftp_cmds.txt remote_user@remote_host
方式二:
#!/bin/sh
sftp remote_user@remote_host << EOF
cd /home/remote_user/data/
lcd /home/local_user/data/
-get 20050201 .
-get 20050202 .
-get 20050203 .
-get 20050204 .
-get 20050205 .
quit
EOF
❷ shell中怎么批量执行命令。
将要执行的命令全部写入一个文件(俗称脚本文件),然后执行脚本文件即可。
注意:假设脚本文件名为test.sh(后缀不必要,只是为了清楚表明是脚本文件),那么在执行脚本文件前,要用 chmod +x test.sh 赋予其可执行权限。然后才能像执行命令那样执行脚本。
--------------------
多台服务器跟一台服务器的操作类似,通信协议和操作方式都是相同的,只是IP地址不同。
所以只要写一个循环,
for ip in $ip1 $ip2 $ip3
do
使用 $ip 做服务器操作
done
❸ shell脚本 如何批量执行多个脚本 不等结果返回
php是要web服务器才能运行吧
❹ 如何使windows下的bat文件调用linux下的shell脚本的方法
参考网站:http://www.07net01.com/linux/_412980_1371458611.html
第一步:规划
在连通bat和shell之前要先把windows和windows之间的关系,linux和linux之间的关系打通。
windows之间用net use 进行连接,linux之间使用ssh进行连接
第二步:打地基
PS:以下所有运行环境都是在超级管理员下运行,省的跳出一些乱七八糟的东西阻碍造桥大计。
windows间可用net use进行测试,查看是否能相连的。
例:net use \\192.168.1.124\ipc$ "123456" /user:"administrator"
net use \\ip地址\ipc$ "密码"/user:"用户名"
这个密码和用户名都是要连接过去那台机子的密码和用户名的
若出现以下提示就证明连接成功
当然万事都是没有这么顺利的。。。
例如。。。
像这么些乱七八糟的错误基本就是网络不通啊,ip地址有误,用户名密码有误之类造成的。。。
所以得多多利用度娘、谷姐之类的神器进行解决。
或许有时候可能还会用到以下一些命令
net use 来查看哪些是存在的
net use \\192.168.1.210\ipc$ /del 用来删除连接
windows的连接方式就是如此。
在你的客户机上用同样的方法去测试需要加入批量关机大军的windows服务器。
linux间通信使用ssh方式来进行。
先进行配置linux间ssh双机互信机制,这样就可以使两机之间通信不需要输入密码进行访问,将密码全部隐藏起来,这样也起到了安全作用。
关于ssh双机信任机制可以我之前的博客上查看
http://alwaysyunwei.blog.51cto.com/3224143/1222601
第三部:架桥
现在linux机器上写一个shell脚本进行批量关机
其中ip.txt存放要批量关机的linux机器ip
当然shutdown_boot.sh应该像下面这样写,而不是图片中的那样,图片中的内容只是我做测试用的。
#!/bin/sh
for ip in `cat ip.txt`
do
ssh $ip <<EOF
echo "{$ip} shutdown now..."
ifconfig
init 0
EOF
done
ssh 192.168.1.216 -p10088<<EOF
echo "shutdown 192.168.1.216 now...."
ifconfig
init 0
EOF
因为在我的正式环境中216这台机子SSH端口比较特殊,所以单独剥离出来。
桥的一端已搭好,现在搭建另一端,windows下bat脚本来进行windows批量关机
建立一个shutdown.bat文件
写入以下内容
#批量关闭windows机器
net use \\192.168.1.249\ipc$ "12345" /user:"administrator"
shutdown -s -f -t 20 -m \\192.168.1.249
net use \\192.168.1.254\ipc$ "123456" /user:"administrator"
shutdown -s -f -t 20 -m \\192.168.1.254
net use \\192.168.1.210\ipc$ "123456" /user:"administrator"
shutdown -s -f -t 20 -m \\192.168.1.210
桥的另一端也搭好了
最后一步就是把两端连起来
这时候就要请出我们的putty工具
可谷姐、度娘下载一个
第一次要进行手动连接
用这个工具进行连接shell脚本所在的那台机子
填上IP和端口即可。
然后进行连接,会提示输入用户名和密码,登入完后就出现sshhostkeys文件夹
然后把shutdown.bat文件放入到跟这文件夹同级目录下。
在bat文件添加以下内容
#批量关闭linux机器
D:
cd puttyfile_0.62cn
putty.exe -ssh -pw 123456-m test.sh [email protected]
简单说下这个语法
putty.ext -ssh -pw 密码 -m 要在linux执行的文件 用户名@IP地址
其中test.sh也是放在sshhostkeys同级目录下,里面写上你要向linux执行的命令
#!/bin/sh
cd /opt/script/shell
#mkdir /tmp/test061502
sh shutdown_boot.sh
#mkdir test06170
最终的结果就是以下内容了
shutdown.bat
test.sh
这样就大功告成
第四步:后期工作
按照这个流程可以完成最初的要求,但这样会存在很多的安全问题,密码明码就是一个问题,这个还有待研究看要怎样处理。
另外一个,在这个bat文件中最好加一个时间判断,比如晚上6点后点击执行这个bat文件可以正常运行,其他时间段点击时则出现告警,以防误操作导致关机。
还有其他的等等一些内容需要完善,待以后想到了在 进行补充。
❺ 求助,shell 脚本批量数据的处理
没太听懂你的意思,如果用bash来写,可以通过数组来控制,比如
数组TraceNum[1] 和对应的PackNuo[1] 数组里边的下标可以用变量来控制。
不知道是不是你想要的效果,具体还是没听懂你想干嘛。
❻ centos shell脚本(批量操作)
#!/bin/bash
HOSTNAME="192.168.111.84" #数据库信息
PORT="3306"
USERNAME="root"
PASSWORD=""
DBNAME="test_db_test" #数据库名称
TABLENAME="test_table_test" #数据库中表的名称
❼ linux shell脚本 批处理
新建一个文件,名字为test(自己定义的名字)
nano test.sh在里面编写脚本
程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中使用/bin/sh来执行程序。
(能写一些shell普通命令,命令用分号隔开)
例子:
#! /bin/bash
# shutdown pc
sudo
shutdown +1执行方法
(1)在控制台输入命令执行:
sh
test.sh
(2)先给脚本可执行权限,双击执行:
右键此文件,选择属性->权限,最下方会有一个“允许以程序执行文件”,将这一项勾选,就可以了。
或在命令行下附予权限:
chmod 777
test.sh 或: chmod +x test.sh
❽ shell脚本如何批量运行代码
可以哈。需要后台运行并且记录下进程号。代码我没有尝试。逻辑是这样。
sh_PID=""
py_PID=""
INFO_FILE="~/.myshell_info"
log_file1="~/.log_file1"
log_file2="~/.log_file2"
if[-e"$INFO_FILE"];then
(readsh_PID;readpy_PID)<"$INFO_FILE"
kill-9$sh_PID
kill-9$py_PID
rm"$INFO_FILE"
else
rm"$INFO_FILE"
nohupxxx.sh2>&11>>"$log_file1"&
echo$!>>"$INFO_FILE"
nohuppythonxxx.py2>&11>>"$log_file2"&
echo$!>>"$INFO_FILE"
fi
❾ 如何对shell脚本进行批量注释
采用下面这种形式:
:<<COMMENTBLOCK
代码行1
代码行2
代码行3
COMMENTBLOCK
注意:第二个COMMENTBLOCK需要顶格写,前面不能有空格。
当然,这两个COMMENTBLOCK也可以替换成任意在被注释代码行中未出现过的字符串。、
其实是利用了Here Documents,将代码段作为空命令 : 的输入。
关于Here Documents,参见:http://linux.die.net/abs-guide/here-docs.html
❿ 怎么用shell脚本批量给多台服务器传输文件
scp-i~/.ssh/id_rsa-p8888/tmp/[email protected]:/tmp
能看懂吗?
-i 后边跟着你的key
别的不用解释了吧?
如果是默认端口不用加-p参数