分享

OpenSSH for windows 与ssh windows

 Moteme 2012-03-11

平时常用putty运行ssh client来连虚拟机上的linux,这实在是太方便了,而现在需要远程登陆到的windows里,虽然telnet也行,但太旧也不安全,于从网上找了遍用sshwindows方法,这需要在windows上安装openssh server,但令人兴奋的是,它竟然自带了lsmkdirrmchmodchown命令,实在是好得不得了,具体设置过程和遇到的问题如下:

1下载OpenSSH

在这里下载

 

2.安装

安装很简单,就像其它windows下的软件一样,双击即可。安装到大半,会有提示框弹出,说必须要设置../etc/passwd文件才可以正常运作openssh,详情可以参阅readme.txtquickstart.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).
生成用户sshhome目录
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不检查用户sshhome目录的权限设置
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的话,用WinSCPFileZilla都行。
WinSCP
FileZilla看及进入中文目录名/文件名都没问题,但拷贝等操作报服务端找不到文件错误,
也许和OpenSSH for Windows带的sftp-server.exe版本低了有关吧(3.x的样子)
注意cygwin环境下将Windows各磁盘映射为/cygdrive/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多