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腳本就可以實現此功能。
具體思路:
- 將服務器的ip列表放到/home/enadmin/iptable文件下
- 在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