想要使用ssh自动登录远程linux机器进行数据备份,本地机器系统为windowsXP,使用的是SSH Secure Shell 3.2.9,远程机器系统为redhat AS5,使用的SSH是系统自带的。
在网上查到了一些资料,但由于都是两端都是linux的环境,所以依照那些文章折腾了好半天也没有完成,最后不得不耐下心来看SecureShell的帮助文档,结合实验,终于调试成功。其实步骤跟网上文章里说的一样,只不过具体操作上有些差异。
1、在本地生成密钥对,包括公钥和私钥。
在命令窗口下,执行ssh-keygen2 -t rsa命令,即可生成一对密钥,会提示密钥文件所在的位置及名称。
不同的ssh工具,用来生成密钥对的命令会有差异,但名字不会差别太大,SecureShell是ssh-keygen2.exe,在linux下好像是ssh-keygen。生成的密钥文件名称也可能会有不同,但多半私钥文件没有后缀,公钥文件带一个.pub的后缀,如我生成的文件分别为:id_rsa_2048_a和id_rsa_2048_a.pub。文件生成在C:/Documents and Settings/ibmsz/Application Data/SSH/UserKeys目录下。
生成密钥对时,会提示输入密码来保护私钥文件,为了登录时不需要输入密码,这儿可以不设。不设保护的安全性当然会降低,别人偷取了你的私钥文件后就可以直接使用。
2、将公钥传至远程机器上
要用哪个用户登录远程机器,就在远程机器上该用户的主目录下建立.ssh目录,目录下建立authorized_keys文件,注意该目录及文件的权限,保证该用户能读写。把公钥文件传到远程机器上,把其内容拷贝到authorized_key文件中,并进行如下编辑:把密钥内容取出来,连成一行,并在前面加上"ssh-rsa "。具体样式可以参照在linux下生成的公钥文件内容,如下所示:
因为SecureShell生成的公钥文件内容和linux系统下SSH生成的不一样,所以,若是按照网上文章说的,直接将公钥内容放进authorized_keys文件中,不好使。须将其改为linux下的格式再放入该文件中。在authorized_keys文件中,每一行都是一个公钥,可以存放多个公钥,以便于多个采用不同私钥的客户端访问。
3、本地机器设置
如果本地机器是linux系统,应该就不需要什么本地设置了,直接执行4、远程登录就可以了。但在windows下使用SecureShell,还是要做一下本地设置。
在C:/Documents and Settings/ibmsz/Application Data/SSH目录下建立identification文件,加上如下一行:
IdKey UserKeys/id_rsa_2048_a
用来指出本地所采用的私钥文件。
我就是光参照网上的文章,由于文章中说的都是linux环境,没有提到这个设置,所以怎么都不使用密钥连接远程机器,总是提示我输入口令。在看了SecureShell的帮助文件后,才知道还需要做这个设置。
4、登录远程机器
可用如下命令登录远程机器,由于对私钥文件没有设置保护口令,所以不需要输入口令,直接连接成功:
ssh2 testuser@remotehost
如果本地用的不是SecureShell,那执行的命令可能是ssh,而不是ssh2。
在看SecureShell帮助文档时才发现,其实它的setting->Global Settings->User Authentication->Keys中,直接就有1、生成密钥(Generate New...),2、上传公钥(Upload...)和3、设置本地(Configure...)的界面操作。但是,它的上传公钥这功能可能是针对它的server的,不是针对一般的ssh的server的,所以它上传到linux上后,不好用。