您的位置:首页 > 其它

ssh免密码登陆

2012-11-06 20:29 113 查看
最近放弃了xshell,从此每次ssh上服务器都要输入密码,问题是服务器众多,每天登陆次数也多,输入密码成了

繁重的工作。

google几次后,试用了免密码登陆的方式,用起来挺方便的。今记录如下,以免忘记。

准备条件:

服务器A:192.168.1.1

服务器B:192.168.1.2

假使我们希望在服务器A(简称A)上想登陆到服务器B(简称B),B端口:22,登陆用户:user1,密码:123

方法一(ssh-keygen):

在A上执行:

ssh-keygen -t rsa //连续按3次回车,即在本地生成了公钥和私钥,不设置密码
ssh user1@192.168.1.2 -p 22 "mkdir .ssh"
scp -P 9922 ~/.ssh/id_rsa.pub user1@192.168.1.2:.ssh/id_rsa.pub


执行完以后,基本上在服务器A上,执行ssh user1@192.168.1.2 -p 22不需要输入密码。

为了简化输入用户,ip,端口等信息,可以如下做

在 ~/.ssh 下创建config文件
输入以下内容
Host B
HostName 192.168.1.2
User user1
Port 22
如果还有其他服务器信息,只需在该文件最后再次添加如上信息便可。


修改完config文件后,以后只需执行 ssh B基本上能登陆服务器B了,既短,又不需要输入密码。
好了,方法一告一段落,但是该方法有个限制,就是只有两台服务器在同一网段,才有效,当不在同一网段时

便会失败,不知道是我服务器配置问题,还是网络导致。如有知道原因的请不吝赐教。多谢。

因此花了点时间研究方法二,如下。

方法二:

编写脚本,随便什么名字。

#!/bin/expect
set timeout 30
spawn ssh [lindex $argv 0] #运行参数一,服务器信息
expect "*password:"
send [lindex $argv 1]\r #服务器登陆密码
interact


运行该脚本:

expect xx.sh B 123


此时服务器B的配置已经写进~/.shh/config。

如未写进~/.ssh/config配置,则该脚本需要相应修改。

介绍完毕,不过我一般会在 ~/.bash_profile里面加入一行:

alias loginb="expect xxx.sh B 123"

每次打开终端的时候该别名会自动起作用,于是乎,每次我只需要使用“loginb”命令,便能登陆服务器B。





This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

本文地址:http://blog.csdn.net/icoler/article/details/8154773 转发请注明。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: