Linux scp/ssh命令免密码登录

举报
Vking 发表于 2020/06/05 20:42:03 2020/06/05
【摘要】 前端时间写了个自动化的脚本,每天从编译环境上取软件包到自己的开发环境,然后安装软件包。但是遇到了一个问题,就是执行scp或ssh命令是需要输入密码的,网上搜了下,用了两种方法搭建了两个自动化环境。

前端时间写了个自动化的脚本,每天从编译环境上取软件包到自己的开发环境,然后安装软件包。但是遇到了一个问题,就是执行scp或ssh命令是需要输入密码的,网上搜了下,用了两种方法搭建了两个自动化环境。

1、ssh密钥

服务器A

服务器B

在A上执行命令 ssh-keygen -t rsa,然后一路回车,最后会在 /root/.ssh/目录下生成 id_rsa 和 id_rsa.pub 文件,将id_rsa.pub 拷贝到服务器B的 /root目录下:

scp ~/.ssh/id_rsa.pub  B:/root/

然后执行 通过 cat 命令 把id_rsa.pub追写到服务器B的.ssh目录下authorized_keys 文件中,命令如下:

cat id_rsa.pub  >>  .ssh/authorized_keys

这时候服务器A就可以无密访问服务器B,反过来,B访问A也同理。

如果执行scp命令的时候,遇到known_hosts错误,去.ssh目录下的known_hosts文件里删除掉你要访问机器的记录。


2、expect

先创建scp_expect.sh文件:

#!/usr/bin/expect
set timeout 200
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]
spawn scp -r $username@$host:$src_file $dest_file
expect {
    "(yes/no)?"
    {
        send "yes\n"
        expect "*assword:" { send "$password\n"}
    }
    "*assword:"
    {
        send "$password\n"
    }
}
expect "100%"
expect eof

在脚本中调用scp_expect文件:

scp_expect.sh   ${host}   root   ${password}    ${src_file}     ${dest_file}

这样就可以在脚本中直接调用scp命令,而不用被输入密码打断。ssh命令同理。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。