最新消息:博客的意义不在于数量,在于原创。

ssh如何不输入密码直接登录远程服务器?

Linux 辰 羽 5146浏览 0评论

每次登录远程服务器都需要输入密码,确实麻烦。
今天研究了一下,发现了三种实现方式,这里一一给大家说说:

1、添加服务器信任关系,这种方法是最简单的。
1) 在本地电脑(Linux、Mac OSX)的终端上执行命令:ssh-keygen,然后一路回车,此时将生成公钥在~/.ssh/id_rsa.pub。
2) 在本地电脑的终端上执行命令:ssh-copy-id -i ~/.ssh/id_rsa.pub chenyu@192.168.1.1,然后回车输入密码。
如果执行失败,也可以将~/.ssh/id_rsa.pub中的文件拷贝追加到远程服务器的./ssh/authorized_keys中。

2、使用sshpass命令,使用简单,但需要安装该软件
1) 安装方法
a. 下载:http://sourceforge.net/projects/sshpass/
b. 运行命令(就是一个简单的安装):

tar -zxvf sshpass-1.05.tar.gz &&
cd sshpass-1.05 &&
./configure --prefix=/opt/sshpass &&
make &&
make install &&
cp /opt/sshpass/bin/sshpass /usr/bin/

2) 使用方法
a. 命令行明文密码

    sshpass -p123456 ssh chenyu@192.168.1.1 "cd /home"

b. 从该文件中读取密码

echo "123456" > user.passwd
sshpass -fuser.passwd ssh chenyu@192.168.1.1 "cd /home"

c. 从环境变量SSHPASS中读取密码

export SSHPASS="123456"
sshpass -e ssh chenyu@192.168.1.1 "cd /home"

3) 对于第一次ssh登陆,会提示“Are you sure you want to continue connecting (yes/no)”,此时sshpass可能会出现问题,你可以如下配置,注意这是ssh的功能:
a. 在ssh后面的添加 -o StrictHostKeyChecking=no,即:sshpass -p123456 ssh chenyu@192.168.1.1 "cd /home" -o StrictHostKeyChecking=no
b. 你也可以在配置文件/etc/ssh/sshconfig中写入“StrictHostKeyChecking no”,这样客户端会自动接受新机器的hostkey

3、使用expect脚本
a. 直接使用expect脚本

#!/usr/bin/expect -f
set timeout 30
spawn ssh chenyu@192.168.1.1
expect "assword:"
send "123456\r"
interact

b. 在bash中使用expect

#!/bin/bash
expect -c "
set timeout 30
spawn ssh chenyu@192.168.1.1
expect "assword:"
send "123456\r"
interact
"

三种方法各有利弊,第一种方法受限制于服务器;最后一种方法最为灵活,很多公司的服务器可能都是一大堆的服务器,为了保证安全,所有服务器都需要用户先登陆一台主服务器,然后从这台机器才能登陆其他机器,此时第三种方法尤为好使,下面给大家一个例子,不懂的自己去看看expect的语法:

#!/usr/bin/expect -f
set timeout 30
spawn ssh chenyu@192.168.1.1
expect "assword:"
send "123456\r"
expect "]*"
send "ssh chenyu@192.168.10.1\r"
expect "assword:"
send "654321\r"
interact

另外,本文仅是做了一些最基本的演示以及示例,同样也不仅仅适用于ssh,同样适用于scp,你懂的。大家完全可以按照自己的需求写自己的shell命令。

最后还是得说一句,注意密码安全...

最近写了一个脚本,需要的同学可以到此看看

转载请注明:辰羽的视界 » ssh如何不输入密码直接登录远程服务器?

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 好文章,内容维妙维肖.
    菱镁板4年前 (2015-04-04)回复