您的位置:首页 > 其它

通过密钥来实现无密码远程SSH登陆和自动同步

2015-05-18 11:04 405 查看
1. 生成密钥

在Windows命令行中,执行C:\Program Files\cwRsync\bin>ssh-keygen.exe -t rsa ,根据提示,输入密钥文件路径名称,比如 C:\devkey.接着提示passphrase,可以不设置,直接回车。密钥文件生成到指定的目录中,私钥和公钥分别是devkey和devkey.pub。

2. 添加公钥到Linux

登录到Linux开发机,进入目录 ~/.ssh/ ,将公钥 devkey.pub添加至该目录,并执行:

$ cat devkey.pub >> authorized_keys

$ chmod 700 authorized_keys

(备注:关于Linux开发机下Key格式,要保持添加的公钥同主机使用的SSH key格式一致,否则会失效,详见后面介绍)

3. 修改Windows同步脚本

使用set命令设置HOME路径,并在ssh命令中使用-i参数指定刚才生成的私钥devkey。(根据个人需要设置同步目录)

Windows批处理脚本示例:

REM ------------BEGIN------------

cd C:\Program Files\cwRsync\bin

c:

SETLOCAL

SET CWRSYNCHOME=%PROGRAMFILES%\cwRsync\bin

SET HOME=%HOMEDRIVE%%HOMEPATH%

rsync --perms --chmod a+rwx -avz --progress --exclude="*svn*" --exclude="project" -e "ssh -p 22 -l neilwu -i /cygdrive/c/devkey " -- "/cygdrive/e/test/"
neilwu@192.168.18.129:/data/home/neilwu/test/

pause

REM ------------END--------------

4. 运行同步脚本

附加说明:

1. 必须使用SET命令设置HOME路径,否则会有提示“Could not create directory '/home/neilwu/.ssh'”。cwrsync的示例脚本里已经有说明:Set HOME variable to your windows home directory. That makes sure that ssh command creates known_hosts in a directory you have access. 因为cwRsync使用的是cygwin的库,只是从cygwin中抽取了这几个命令出来,ssh命令在执行时需要记录Host公钥信息,也可以使用选项UserKnownHostsFile
来指定known_hosts文件路径,不过Windows下新建一个名称中有"."的文件夹要在CMD中用命令"mkdir .ssh"。

2. ssh可以指定选项 -o StrictHostKeyChecking=no,来禁用远程主机的公钥检查。不过如果key不变时,只在首次有用。

3. 建议脚本执行完后,最后用pause命令暂停,可以检查一下本次同步的文件

4. 关于Key

cwRsync使用的是OpenSSH,刚才产生的devpub.key格式如下:

ssh-rsa AAAAB3Nza...

要确认Key格式的话,在你的Linux开发机上生成一对Key即可。运行ssh-keygen -t rsa,例如,我的公钥是:

---- BEGIN SSH2 PUBLIC KEY ----

Comment: "2048-bit RSA, converted from OpenSSH by neil"

AAAAB3NzaC1yc2EAAAABIwAA...

可以看到是2048位的Key,而且pubkey是SSH2格式的。

所以要对刚才Windows下生成的进行格式转换:ssh-keygen -ef devkey.pub > newdevkey.pub,然后用newdevkey.pub添加到Linux开发机的~/.ssh2/目录下,

同时,echo "Key newdevkey.pub" >> ~/.ssh2/authorization

----------------------------------------------

1、如果想要获得最大化的安全性,禁止rsync服务以口令登录,可以修改sshd_conf中的PasswordAuthentication yes为no

2.另外,最好禁止root用户的登陆,修改/etc/ssh/sshd_config里的“permitrootlogin"为no,可禁止root用户登陆。

3.也可以限制某个用户或者用户组的登陆,使用"denyusers"和"denygroups"即可。

----------------------------------------------

windows的客服端上如何使用putty通过秘钥登陆,步骤如下:

a.将私钥复制到windows客户端,使用puttygen导入私钥,点击“save private key”进行私钥的转换

b.打开putty,添入“hostname”、“port”,然后选择左面导航里的“Connection”->“Data”,在“Auto-login username”里添入你要登陆的用户名;在“SSH”->“Auth”里导入转换后的秘钥文件。

c.单击“open”登陆。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: