1. 程式人生 > >OpenSSH for windows 與ssh windows

OpenSSH for windows 與ssh windows

平時常用putty執行ssh client來連虛擬機器上的linux,這實在是太方便了,而現在需要遠端登陸到的裡,雖然telnet也行,但太舊也不安全,於從網上找了遍用sshwindows方法,這需要在windows上安裝openssh server,但令人興奮的是,它竟然自帶了lsmkdirrmchmodchown命令,實在是好得不得了,具體設定過程和遇到的問題如下:

1下載OpenSSH

在這裡下載

2.安裝

安裝很簡單,就像其它windows下的軟體一樣,雙擊即可。安裝到大半,會有提示框彈出,說必須要設定../etc/passwd檔案才可以正常運作openssh,詳情可以參閱readme.txt

quickstart.txt檔案。不用管它,按確定繼續完成安裝。安裝完後可以看到quickstart.txt檔案的內容

3.配置

第一、開啟一個msdos終端,進入C:\Program Files\OpenSSH\bin目錄。(安裝完openssh後,發現多了幾個在linux中常用的命令,如:lsmkdirrmchmodchown等,很有親切感!)

第二、將計算機上的組匯入group檔案中。這裡分兩種情況,第一種是本地,第二種是在域中。分別執行-l-d引數。如果想將兩種組都匯入,可以先執行-l的引數再執行-d引數的命令。

mkgroup -l >> ..\etc\group 

       這是加入本地組的命令。
mkgroup -d >> ..\etc\group       
這是加入域組的命令。

原文:
Use mkgroup to create a group permissions file. For local groups, use the "-l" switch. For domain groups, use the "-d" switch.
For both domain and local, it is best to run the command twice (remember to use >>, not >). If you use both, make sure to edit the file to remove any duplicate entires.

第三、將計算機的使用者與其密碼匯入passwd檔案中。與上面的組一樣,也是分本地和域兩種情況。如果沒有該檔案或沒有匯入使用者的資訊。作為server的話,將不能被登陸,因為沒有使用者嘛!

mkpasswd -l >> ..\etc\passwd      這是加入本地使用者的命令。
mkpasswd –d >> ..\etc\passwd      
這是加入域使用者的命令。

原文:
Use mkpasswd to add authorized users into the passwd file. For local users, use the "-l" switch. For domain users, use the "-d" switch.
For both domain and local, it is best to run the command twice (remember to use >>, not >). If you use both, make sure to edit the file to remove any duplicate entires.

通常我們個人電腦都沒有用到域組,所以只要執行如下兩條命令即可。(記得在OpenSHH/bin目錄下進行,也可以自行設定PATH路徑)

mkgroup -l >> ..\etc\group        
  mkpasswd -l >> ..\etc\passwd

4.啟動OpenSSH server

net start opensshd

關閉命令是:net stop opensshd

5.使用

ssh -p埠使用者名稱@對方主機IP
sftp -p
埠使用者名稱@對方主機IP
scp -p
埠使用者名稱@對方主機IP:檔案路徑.
注意:埠預設是22,所以一般不用加-p引數。要更改埠可以在etc/sshd_config中更改。
注意:cmd下改變改變位置的方式是:C:\> D:或E:

6.出現的問題

輸入“ssh -p埠使用者名稱@對方主機IP”後出現如下警告提示:

Could not create directory '/home/Administrator/.ssh”不過依然可以正常登陸,而網上的說法是:這是由於目錄/home/Administrator/.ssh不存在造成的,在Windows 2000 and XP中,/home預設是在C:\Documents and Settings;在Windows NT 4.0中,/home預設是在C:\WINNT\Profiles,但我安裝完查看了登錄檔,/home目錄的預設值卻為

C:\Documents and Settings\Administrator\「開始」選單”解決辦法如下:

修改登錄檔,把它改為D:\svn\openssh\home(home目錄也可以放在其它地方,隨你喜歡)

執行(R)裡輸入regedit,開啟登錄檔,然後找到如下項,修改之即可。

[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/home]

"native"="D:\\svn\\OpenSSH\\home"

"flags"=dword:0000000a

"native"改成你自己的/home所在目錄,此目錄就是預設的登陸目錄,比如使用者名稱:Administrator那你進入的目錄是/home/Administrator(注:更改目錄後要建立對應的目錄,並且使用者名稱的目錄也要建立)
修改完了登錄檔之後,在D:\svn\OpenSSH目錄上建立home目錄、使用者目錄以adminstrator為例

cd D:\svn\OpenSSH

md home

md home\Administrator

md home\Administrator\.ssh //注意,此目錄只能在命令列下生成,不信你試下

重啟服務器,檢查配置後執行是否正常,這時你可能會發現,以adminstrator使用者登陸,密碼總是出錯,原因是windows預設adminstrator使用者的密碼為空,密碼為空的使用者是無法登陸的,如果想實現無密碼自動登陸,那下面的密碼鑰機制會說到,因此這兒需要為administartor設定密碼,假如設了密碼還是不行,怎麼辦?別緊張,先在命令列裡輸入lusrmgr.msc開啟本地使用者和組,雙擊administrator使用者,檢視常規中的“使用者下次登陸時須更改密碼(M)”是不是選上了,如果選上了,那就將其取消,選取“密碼永不過期”這一項,一切問題就能解決,這樣之後還不行的話,那我也幫不了你了,那你就試下將防火牆之類的關掉。
還要說明一下的是:當用戶登陸成功後,會在/home/[使用者名稱]/.ssh目錄下行成一個known_hosts檔案,裡面包存的是公鑰的認證內容,但奇怪的是我發現只有administrator/.ssh目錄下才有而已,這個我就不知道了。

7.設定基於金鑰認證的方式訪問,可實現自動登陸。(金鑰認證以前實現過,下面的內容我就不具體實踐了)

----------------------------------------------------------
1).
建立一個Windows使用者ssh專用來SSH遠端登陸。
可以在本地安全策略中設定禁止ssh本地登陸,不過這樣以來單機除錯就不方便了。
----------------------------------------------------------
2).
生成使用者資訊。這裡是生成了所有使用者的資訊,當然只指定使用者ssh也行
.\bin\mkgroup -l >> .\etc\group
.\bin\mkgroup -d >> .\etc\group
.\bin\mkpasswd -l >> .\etc\passwd
.\bin\mkpasswd -d >> .\etc\passwd
----------------------------------------------------------
3).
生成使用者ssh的home目錄
mkdir home
cd home
mkdir ssh
cd ssh
mkdir .ssh
----------------------------------------------------------
4).
修改cygwin環境預設的home目錄
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/home]
"native"="C:\\Program Files\\OpenSSH\\home"
"flags"=dword:0000000a
----------------------------------------------------------
5).
生成金鑰
cd bin
mkdir keys
ssh-keygen -t rsa -b 2048 -f keys\rsa2048 -C "This is passphrase hint" -N "This is passphrase"
mkdir keys\.ssh
cat rsa2048.pub > keys\.ssh\authorized_keys
----------------------------------------------------------
6).
將上面生成私轉為SSH客戶端可使用格式,這裡用PuTTY,可用PuTTYgen轉為PuTTY用的PPK格式
----------------------------------------------------------
7).
將OpenSSH設定為只接受金鑰認證。
這裡額外開了sftp服務。另外,StrictModes no選項將告訴OpenSSH不檢查使用者ssh的home目錄的許可權設定
Protocol 2
Port 22
HostKey /etc/ssh_host_rsa_key
PermitRootLogin no
PermitEmptyPasswords no
StrictModes no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
#IgnoreUserKnownHosts yes
PasswordAuthentication no
UsePAM no
UsePrivilegeSeparation no
MaxStartups 10:30:60
Subsystem sftp /usr/sbin/sftp-server
----------------------------------------------------------
8).
設定路由器NAT和軟體防火牆
NAT設定了對映22號埠的TCP包。
軟體防火牆設定允許C:\Program Files\OpenSSH\usr\sbin\sshd.exe偵聽TCP port 22。
----------------------------------------------------------
9).
基本上差不多了,要啟用或停止OpenSSH服務可
net start opensshd
net stop opensshd
在services.msc裡啟用或停止也可
----------------------------------------------------------
10). PuTTY
作中端還不錯,就是中文不好辦。
要sftp的話,用WinSCP和FileZilla都行。
WinSCP和FileZilla看及進入中文目錄名/檔名都沒問題,但拷貝等操作報服務端找不到檔案錯誤,
也許和OpenSSH for Windows帶的sftp-server.exe版本低了有關吧(3.x的樣子)
注意cygwin環境下將Windows各磁碟對映為/cygdrive/