ssh-agent

在免密码登录ssh的基础上,实现,从一个机器上,在多台机器上相互免密码登录。

最开始,我以为:

比如,有1台机器O,然后配置好O在A、B、C上的面免密登录。然后呢,A、B、C之间,不设置免密登录。在O机器上设置ssh-agent,然后,使用O,ssh登录A,再从As可以面密登录B、C,不需要密码,这种场景。

实际上呢,顶多经过一次堡垒机,还能使用自己的秘钥登录。

参考资源

设置

在机器O上设置

# 以下两步
eval `ssh-agent`
ssh-add

修改配置文件

cat /etc/ssh/ssh_config |grep Forward

    ForwardAgent yes
#   ForwardX11 no

中转机设置

一般不需要设置,默认是允许的

cat /etc/ssh/sshd_config |grep Allow

AllowAgentForwarding yes

进阶

为了实现共享,多个shell都能用上,使用下面方式。这样,非常方便的只需将源头的机器上的机器上的公钥,拷贝到远程机器上。可以在远程的各机器上,来回ssh

cat /etc/profile.d/ssh-agent.sh

#!/bin/sh
if [ -f ~/.agent.env ]; then
    . ~/.agent.env >/dev/null
    if ! kill -0 $SSH_AGENT_PID >/dev/null 2>&1; then
        echo "Stale agent file found. Spawning new agent. . ."
        eval `ssh-agent |tee ~/.agent.env`
        ssh-add
    fi
else
    echo "Starting ssh-agent. . ."
    eval `ssh-agent |tee ~/.agent.env`
    ssh-add
fi

对上面节点的解释:

如果  存在环境变量
	加载环境变量
	如果进程不存在,则
		重其一个进程
否则
	启动ssh-agent,ssh-ad

其他

ssh-add  ~/.ssh/id_rsa_custom



ssh-copy-id -i ~/.ssh/id_rsa.pub  root@ip
ssh -i ~/.ssh/id_rsa.pub  root@ip

# 生成带密码的
ssh-keygen  -f ~/.ssh/id_rsa_test -P'123456'

# 列出
ssh-add -l
# 清空
ssh-add -D 
# 移除指定的私钥
ssh-add -d /path/of/key/key_name
# 锁定,需要指定锁定密码,锁定后的ssh代理暂时不能帮助我们管理私钥
ssh-add -x
# 解锁,需要输入创建锁时设定的密码,解锁后ssh代理可正常工作
ssh-add -X	

# 关闭
ssk-agent -k 

# 传递密码
sshpass

拷贝文件

# 在本机执行 
scp root@192.168.1.15:/root/test.txt root@192.168.1.237:/root/