通過sftp實現文件分發功能


1       環境:

分發服務器:ubuntu server 64bit,192.168.56.22

接受服務器:windows server 2008,192.168.56.102

2       前提:

2.1     安裝openssh

默認安裝即可。在安裝完畢以后,openssh會自動導入windows的用戶和組。這里需要注意的一點是,在windows當中是不區分大小寫的,所以對於用戶名ADMINISTRATOR和Administrator是沒有區別的。但是在linux當中是區分大小寫的,所以我們在linxu當中嘗試ssh連接windows的時候,首先查看C:\Program Files\OpenSSH\etc\passwd這個文件,看看本機的用戶名是什么。比如我們要用XXXADMIN這個賬戶來建立無密碼的可信連接,我們必須查看C:\Program Files\OpenSSH\home目錄下查看是否有XXXADMIN這個文件夾。如果沒有則創建該目錄。

2.2     修改openssh配置文件

打開C:\Program Files\OpenSSH\etc\sshd_config,找到一下內容:

# The following setting overrides permission checks on host key files
# and directories. For security reasons set this to "yes" when running
# NT/W2K, NTFS and CYGWIN=ntsec.
StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
RSAAuthentication no
#PubkeyAuthentication yes

將其修改為:

# The following setting overrides permission checks on host key files
# and directories. For security reasons set this to "yes" when running
# NT/W2K, NTFS and CYGWIN=ntsec.
StrictModes no
#MaxAuthTries 6
#MaxSessions 10
RSAAuthentication no
PubkeyAuthentication yes

2.3     修改本地組策略:

打開組策略->計算機配置->windows設置->安全設置->本地策略->用戶權限分配->,修改以下兩項內容:

  • 創建一個令牌對象:添加administrator賬戶,
  • 以操作系統方式執行:添加administrator賬戶,

2.4     修改OpenSSH Server的服務屬性:

打開“服務”,找到OpenSSH Server,打開OpenSS Server的“登陸”屬性,使用administrator賬戶來登陸這個服務,修改完畢以后重啟openssh服務。

2.5     建立無密碼的可信連接

2.5.1  實現原理:

使用一種被稱為"公私鑰"認證的方式來進行ssh登錄。"公私鑰"認證方式簡單的解釋是:

  • 首先在客戶端上創建一對公私鑰 (公鑰文件:~/.ssh/id_rsa.pub; 私鑰文件:~/.ssh/id_rsa)
  • 然后把公鑰放到服務器上(~/.ssh/authorized_keys), 自己保留好私鑰。
  • 當ssh登錄時,ssh程序會發送私鑰去和服務器上的公鑰做匹配。如果匹配成功就可以登錄了

2.5.2  具體步驟:

2.5.2.1 在linxu端創建公私鑰

enadmin@ubuntu-server:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/enadmin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/enadmin/.ssh/id_rsa.
Your public key has been saved in /home/enadmin/.ssh/id_rsa.pub.
The key fingerprint is:
a8:32:94:81:d9:10:a6:04:2f:35:50:1a:78:ac:d5:69 enadmin@ubuntu-server
The key's randomart image is:
+--[ RSA 2048]----+
|OB+. .           |
|=A+.E            |
|*++.             |
|.. 1   .         |
|  2   . 3        |
| .   .           |
|  4 .            |
|   5             |
|                 |
+-----------------+

2.5.2.2 進入到.ssh目錄

enadmin@ubuntu-server:~$ cd .ssh
enadmin@ubuntu-server:~/.ssh$ ll
total 20
drwx------ 2 enadmin enadmin 4096 May  6 14:16 ./
drwxr-xr-x 6 enadmin enadmin 4096 May  6 14:11 ../
-rw------- 1 enadmin enadmin 1679 May  6 14:16 id_rsa
-rw-r--r-- 1 enadmin enadmin  403 May  6 14:16 id_rsa.pub
-rw-r--r-- 1 enadmin enadmin  222 May  6 14:11 known_hosts

查看公鑰:
enadmin@ubuntu-server:~/.ssh$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUHsZnOiIp+kFv9MuC/hiUsnWwNOg2aH90ypFRmNmrEM9Cu2wQ4a2e5fjaAEjoO/cnaRbhtAPVUptMYoqh+mbWmvS1G7GqwLIy8UxMigLmpR9oEXK10zfXAAAAAAAAAAqd8cQdo9qiB8sYCVoj2c2iTGhhZ4Roy1FsIlYP1NHsp9Em8cAF+n76KFk8SAJZ+wF5UlIyePvhQzqJxoXsfqmo/Ywq2ZBRBf2MzOik3ns1khRB29g9m35axuELOZ8UKEzW4Nf/RHxy4HDstCjKWaJx4/TF9hEEufeA+Z9/8Aj/2RIXDj14+bsinI6i1Gtp7DApMNt8W3jjU69j2J4Vkv enadmin@ubuntu-server

2.5.2.3 測試ssh連接

在linxu中ssh到windows:

enadmin@ubuntu-server:~/.ssh$ ssh XXXADMIN@192.168.15.94

執行上述命令以后會讓你輸入密碼,如果輸入密碼以后成功登陸,那么表示可以建立ssh連接。

2.5.2.4 在windows的openssh目錄下創建.ssh目錄

需要注意的是在windows下創建目錄不能帶有點號”.”,所以我們如果要在windows中創建.ssh這個目錄,必須通過命令行實現,命令如下:

#mkdir .ssh --這個命令既可以在windows命令行下執行,也可以在linux目錄下執行。

2.5.2.5 在windows的.ssh目錄創建authorized_keys文件

將上面的id_rsa.pub的內容拷貝到authorized_keys這個文件當中去。

2.5.2.6 無密碼連接測試

類似於2.5.2.3的測試ssh連接,這里執行同樣的命令:

enadmin@ubuntu-server:~/.ssh$ ssh XXXADMIN@10.138.15.94

如果執行以后發現不需要我們再輸入密碼了,那么表示無密碼連接測試通過。

2.5.2.7 分發文件測試

在linxu中使用scp命令進行文件拷貝,具體的scp命令可以參考:scp拷貝文件和拷貝目錄詳解

下面我以一個scada升級場景來進行說明如何使用scp命令。

我們將所有的scada升級文件放到ENVISION目錄下,假設文件目錄如下:

ENVISION

     --TEST1

         aaa.txt

         bbb.txt

     --TEST2

         cc.txt

         dd.txt

假設這個ENVISION目錄保存在linux服務器的/home目錄下,我們需要將這個ENVISION目錄分發到windows服務器的D盤根目錄下,我們執行以下命令:

scp -r /home/ENVISION XXXADMIN@10.138.15.94:/cygdrive/d

執行完畢以后我們再到windows服務器上面查看文件是否被傳過來了。

2.5.2.8 如何實現多服務器批量分發

在2.5.2.7中已經做了文件分發的測試了,現在我們要做的就是通過腳本實現多服務器的文件分發。我們只需要編寫相應的shell腳本就可以實現此功能。

具體思路:

  1. 將服務器的ip列表放到/home/enadmin/iptable文件下
  2. 在shell腳本中讀取ip列表,將/home/ENVISION目錄批量分發到各個服務器上。

腳本內容如下:

#!/bin/bash
#Created data:2014-5-7
#Lastest modified date:2014-5-7
ip=`cat /home/enadmin/iptable`
for i in $ip;do
date '+%Y-%m-%d-%H-%M-%S' >> /home/enadmin/log
echo $i >> /home/enadmin/log
#Copy files to client server
scp -r /home/ENVISION XXXADMIN@$i:/cygdrive/d
done

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM