❶ 如何在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參數