精华内容
下载资源
问答
  • ssh-agentssh-sshd,开启ssh服务
    2021-03-07 18:01:13

    使用命令 ps -e | grep ssh 后:
    在这里插入图片描述
    ssh-agent 对应客户端,代表ssh-client启动了
    sshd 对应服务端,代表ssh-server启动了

    如果缺少sshd,说明ssh服务 没有启动 或者 没有安装
    安装命令为:

    • 安装ssh-client命令:apt-get install openssh-client
    • 安装ssh-server命令:apt-get install openssh-server

    启动、关闭命令为:

    • 启动命令:sudo systemctl start ssh
    • 关闭命令:sudo systemctl stop ssh
    • 开机自动启动ssh命令:sudo systemctl enable ssh
    • 关闭ssh开机自动启动命令:sudo systemctl disable ssh
    • 判断启动是否成功: ps -e | grep ssh
    更多相关内容
  • 要将此映像与,您需要使用环境变量JENKINS_AGENT_SSH_PUBKEY而不是作为启动参数来传递公共SSH密钥。 在“ Docker模板”的“环境”字段(高级部分)中,只需添加: JENKINS_AGENT_SSH_PUBKEY= 不要在公钥周围加上...
  • 其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。 语法格式: ssh-agent [参数] 常用参数:...
  • use-ssh-agent

    2021-05-13 17:12:41
    使用SSH代理 此操作将启动SSH代理 输入项 没有任何。 用法示例 - uses : frankdejonge/use-ssh-agent@1.0.0
  • 概要 该代理程序替代了旧的ssh代理程序。 该程序包包括在命令行上使用的“服务器”和...listening on path /tmp/sshagent.sock % node-ssh-list [] % node-ssh-add Enter pass phrase for /Users/user/.ssh/id_rsa
  • yubikey-agent是YubiKeys的无缝ssh-agent。 便于使用。一个命令的设置,一个环境变量,它仅在后台运行。 坚不可摧。允许拔出,Hibernate和挂起。无需重启。 兼容的。提供可与所有服务和服务器一起使用的公钥。 安全...
  • iam-ssh-agent分为两个部分:一个二进制文件,它通过ssh-agent协议绑定unix域套接字;另一个是无服务器API,该API使用API​​ Gateway和Lambda函数来回答list keys和sign data请求。 一个Rust板条箱,用于构建iam-...
  • 使用ssh-agent之前 使用ssh公钥认证的方式可以免去ssh客户端(如ssh命令、xshell等)连接远端主机sshd时需要输入对方用户密码的问题。 但如果执行ssh命令所在的主机上保存了多套秘钥且将各公钥分发给了不同的远端...

    使用ssh-agent之前

     

    使用ssh公钥认证的方式可以免去ssh客户端(如ssh命令、xshell等)连接远端主机sshd时需要输入对方用户密码的问题。

    但如果执行ssh命令所在的主机上保存了多套秘钥且将各公钥分发给了不同的远端主机,这时即使使用了公钥认证,也依然需要输入密码,因为ssh客户端不知道要读取哪个私钥去和该远端主机上的公钥配对。

    看下面这张图描述的情况:

    上面描述的情形是这样的:ssh客户端要管理web server群,还要管理mysql server群,ssh客户端要为这两个群内的主机使用不同的密钥对。例如要连接web server群内的主机,使用~/.ssh/id_rsa_1这一套秘钥,连接mysql server群内的主机,使用~/.ssh/id_rsa_2这一套秘钥。

    于是,将id_rsa_1.pub分发给web server群内的每个主机,将id_rsa_2.pub分发给mysql server群内的每个主机:

    
    $ ssh-copy-id -i ~/.ssh/id_rsa_1.pub root@webserver1
    $ ssh-copy-id -i ~/.ssh/id_rsa_1.pub root@webserver2
    $ ssh-copy-id -i ~/.ssh/id_rsa_1.pub root@webserver3
    $ ssh-copy-id -i ~/.ssh/id_rsa_2.pub root@mysqlserver1
    $ ssh-copy-id -i ~/.ssh/id_rsa_2.pub root@mysqlserver2
    $ ssh-copy-id -i ~/.ssh/id_rsa_2.pub root@mysqlserver3
    

    这一切进行的都很欢乐,但是一连接,发现还是要密码:

    
    $ ssh root@webserver1
    快输入 root@webserver's 密码:???
    
    $ ssh root@mysqlserver1
    快输入 root@mysqlserver's 密码:???
    

    这是因为ssh客户端连接webserver1的时候,除了默认会读取的规范私钥文件id_rsa(或其它秘钥类型)外,不会自动读取任何一个文件,同理连接mysqlserver1也一样。

    正确的连接方式是指定连接时使用哪个私钥去配对:

    
    $ ssh -i ~/.ssh/id_rsa_1 root@webserver1
    $ ssh -i ~/.ssh/id_rsa_2 root@mysqlserver1
    

    好欢乐,终于连上了。但是真恶心,还要指定连接私钥。

    不仅如此,如果私钥是加密(passphrase)的,指定私钥的时候还得输入这个passphrase密码。😭

    ssh-agent是干什么的

    程序员很不满意这样的连接方式,于是创造了一个中间的私钥管理者ssh-agent:你不是不知道怎么配对吗,我帮你配。而且这个功能对于程序员来说,so easy。

    我在ssh身份认证阶段中解释过,ssh认证的过程其实是客户端(ssh命令端)读取自己的私钥并推导出指纹发送给服务端(sshd端),服务端也使用自己保存的公钥推导出指纹进行对比,如果指纹相同说明服务端的公钥和客户端的私钥是配对的。如下是公钥、私钥的指纹计算方式:

    
    $ ssh-keygen -l -f ~/.ssh/id_rsa_2
    2048 2c:e9:70:a8:f5:8d:87:9f:8c:de:cf:cf:14:f4:40:52  root@xuexi.longshuai.com (RSA)
    $ ssh-keygen -l -f ~/.ssh/id_rsa_2.pub 
    2048 2c:e9:70:a8:f5:8d:87:9f:8c:de:cf:cf:14:f4:40:52  root@xuexi.longshuai.com (RSA)
    

    这个密钥身份认证的过程是理解ssh-agent的关键。

    ssh-agent的主功能大概如下图描述:

    使用ssh-agent后,可以通过ssh-add命令向ssh-agent注册本机的私钥,ssh-agent会自动推导出这个私钥的指纹(实际上是ssh-add计算的)保存在自己的小本本里(内存),以后只要ssh连接某主机(某用户),将自动转发给ssh-agent,ssh-agent将自动从它的小本本里查找私钥的指纹并将其发送给服务端(sshd端)。如此一来,ssh客户端就无需再指定使用哪个私钥文件去连接。

    总的看上去,ssh-agent的角色就是帮忙存储、查找并发送对应的指纹而已,也就是说它是一个连接的转发人,扮演的是一个代理的角色。

    ssh并非一定支持ssh-agent转发的连接。要使用ssh-agent的转发功能,需要在sshd_config中开启AllowAgentForwarding选项,在ssh_config中开启ForwardAgent选项。

    使用ssh-agent和ssh-add

    先将ssh-agent运行起来:

    
    $ ssh-agent
    SSH_AUTH_SOCK=/tmp/ssh-GiORRAqMXEFt/agent.28161; export SSH_AUTH_SOCK;
    SSH_AGENT_PID=28162; export SSH_AGENT_PID;
    echo Agent pid 28162;
    

    输出结果中明确说明了导出了几个环境变量,同时也可以知道ssh-agent使用Unix Domain套接字的方式监听在本机上以及其pid为28162。到时候可以直接使用kill 28162杀掉这个进程,更直接的方式是使用ssh-agent -k,它会根据当前的环境变量SSH_AGENT_PID来杀进程。

    但是很不幸,上面的ssh-agent尽管运行成功了,但是那两个环境变量并没有导出,上面的结果只是显示给用户看的。所以更多时候,会使用eval来执行ssh-agent,使得这些环境变量也被导出:

    
    # 先杀掉刚才的ssh-agent
    $ kill 28162
    
    $ eval `ssh-agent`
    Agent pid 28173
    

    ssh客户端上运行ssh-agent后,就可以使用ssh-add命令向ssh-agent添加私钥(如果私钥使用了passhprase密码,则要求输入一次密码)。

    
    $ ssh-add
    $ ssh-add ~/.ssh/id_rsa_1
    $ ssh-add ~/.ssh/id_rsa_2
    

    默认会添加~/.ssh/下的所有私钥类文件(~/.ssh/id_rsa, .ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519, ~/.ssh/identity),也可以指定要添加的文件。正如上面给出的示例。

    ssh-add命令是查找当前环境变量SSH_AUTH_SOCK的值并发送添加请求给对应套接字的,所以这个套接字环境变量非常重要。

    之后再使用公钥认证就可以直接连接到目标主机:

    
    $ ssh root@webserver1
    $ ssh root@webserver2
    $ ssh root@webserver3
    
    $ ssh root@mysqlserver1
    $ ssh root@mysqlserver2
    $ ssh root@mysqlserver3
    

    ssh-agent的痛点和解决方案

    ssh-agent的工作是依赖于环境变量SSH_AUTH_SOCKSSH_AGENT_PID的,不同用户,不同终端,只要没有和这两个环境变量配对的ssh-agent,这个agent进程就不可使用。要想使用某个agent,就必须在自己的shell中先设置好这两个环境变量

    另外需要注意的是,以eval `ssh-agent`启动的方式会直接让ssh-agent工作在后台,它自己会独立成自己的进程组,其父进程或终端退出后它仍然会挂靠在pid=1的init/systemd下。而ssh-agent的工作是依赖于环境变量SSH_AUTH_SOCKSSH_AGENT_PID的,shell或终端退出后这两个环境变量就消失了,使得之前运行的ssh-agent被多余地保留在后台。

    其实,我们自己完全可以根据已有的ssh-agent推导出这两个环境变量。如果ssh-agent进程还存在,那么在/tmp/目录下一定有对应的套接字文件(除非启动ssh-agent时自定义了套接字路径)。

    
    $ tree /tmp/ssh* 
    /tmp/ssh-q3tM0FzpCcdU
    └── agent.28629
    /tmp/ssh-SkKrrkK6qLDq
    └── agent.28817
    

    于是环境变量SSH_AUTH_SOCK的值已经得到了。再根据agent.<ppid>中的ppid值,将其加上1,就是其子进程ssh-agent进程的PID值。例如,想要使用上面agent.28629对应的ssh-agent,那么设置:

    
    export SSH_AUTH_SOCK=/tmp/ssh-q3tM0FzpCcdU/agent.28629
    export SSH_AGENT_PID=28630
    

    我们完全可以自己写一个脚本来自动化获取并设置这些环境变量。

    不过已经有人用shell脚本提供好了更完善的解决方案:https://github.com/wwalker/ssh-find-agent。

    下载好其中的ssh-find-agent.sh脚本,并放到某个目录下。例如直接放在/etc/profile.d目录下,然后给执行权限:

    
    $ wget https://raw.githubusercontent.com/wwalker/ssh-find-agent/master/ssh-find-agent.sh -O /etc/profile.d/ssh-find-agent.sh
    $ chmod +x /etc/profile.d/ssh-find-agent.sh
    

    以后,只要在新的终端上,或者和ssh-agent进程失联的shell中执行(如果在旧终端上,需要先source该shell脚本):

    $ ssh-find-agent -a
    

    它会自动寻找到第一个ssh-agent进程并配置好相关环境变量:

    
    $ ssh-find-agent -a
    $ echo $SSH_AUTH_SOCK
    /tmp/ssh-SkKrrkK6qLDq/agent.28817
    $ echo $SSH_AGENT_PID
    28818
    

    不给任何参数的ssh-find-agent函数会列出当前能找到的ssh-agent进程以及相关环境变量和编号。

    
    $ ssh-find-agent
    export SSH_AUTH_SOCK=/tmp/ssh-q3tM0FzpCcdU/agent.28629  #1)         
    export SSH_AUTH_SOCK=/tmp/ssh-SkKrrkK6qLDq/agent.28817  #2)  
    

    使用ssh-find-agent的-c选项可以手动选择使用哪个ssh-agent进程。

    如果不知道当前是否有ssh-agent,可以使用下面的方式:

    $ ssh-find-agent -a || eval $(ssh-agent) > /dev/null
    

    这样就会在找不到的时候自动开启一个ssh-agent。

    除了上面的方法,还可以直接使用另一种管理工具:keychain。

    $ yum install -y keychain
    

    keychain能很好的管理ssh-agent,可以去查看下如何使用。

    管理ssh-agent中的私钥

    ssh-agent命令的选项:

    
    -a bind_address
    指定ssh-agent运行时绑定的Unix Domain套接字路径,默认是`$TMPDIR/ssh-xxx/agent.<ppid>`
    
    -c
    -s
    指定ssh-agent运行时输出的内容(那些环境变量)是csh还是bash格式的语句
    
    -d
    调试模式
    
    -k
    杀掉`SSH_AGENT_PID`环境变量指定的pid进程
    
    -t life
    指定ssh-agent中私钥(指纹)的有效期。默认单位为秒,可以指定m(分钟)、h(小时)、d(天)、w(周)。如果不指定,则永久有效。该有效期可以被ssh-add指定的有效期选项覆盖
    

    ssh-add命令的选项(部分选项):

    
    -D
    删除ssh-agent中所有私钥(指纹)
    
    -d key_file
    删除指定私钥
    
    -L
    列出agent当前主机上所有公钥参数,即公钥文件中的内容
    
    -l
    列出agent当前已保存的指纹信息
    
    -t
    设置私钥(指纹)的有效期。默认单位为秒,可以指定m(分钟)、h(小时)、d(天)、w(周)
    
    -x
    使用一个密码将agent锁起来(lock),锁起来的agent将不再提供任何服务
    
    -X
    解锁agent
    
    
    展开全文
  • 了解ssh代理:ssh-agent

    2020-09-14 15:04:07
    转载自了解ssh代理:ssh-agent | 朱双印博客 了解ssh代理:ssh-agent ssh代理是一个程序,它可以帮助我们管理私钥,ssh-agent即为ssh代理程序。 那么什么时候需要ssh代理帮助我们管理私钥呢?当遇到如下情况时,我们...

    转载自了解ssh代理:ssh-agent | 朱双印博客

    了解ssh代理:ssh-agent

    ssh代理是一个程序,它可以帮助我们管理私钥,ssh-agent即为ssh代理程序。
    那么什么时候需要ssh代理帮助我们管理私钥呢?当遇到如下情况时,我们会需要ssh代理。
    1、使用不同的密钥连接到不同的主机时,需要手动指定对应的密钥,ssh代理可以帮助我们选择对应的密钥进行认证,不用手动指定密钥即可进行连接。
    2、当私钥设置了密码,我们又需要频繁的使用私钥进行认证时,ssh代理可以帮助我们免去重复的输入密码的操作。
    上述两种情况我们会一一道来,不过在描述它们之前,我们先来了解一下怎样使用ssh代理。

    启动ssh代理并添加密钥

    首先,如果想要使用ssh代理,我们则需要先启动ssh代理,也就是启动ssh-agent程序,如下两条命令都可以启动代理,但是略有不同。

    ssh-agent $SHELL
    eval `ssh-agent`
    

    如果你最小化安装了centos,那么你执行上述命令时,可能会提示找不到ssh-agent命令,此时你需要安装openssh-clients,安装后即可使用上述命令。

    当我们使用ssh-agent $SHELL命令时,会在当前shell中启动一个默认shell,作为当前shell的子shell,ssh-agent程序会在子shell中运行,当执行ssh-agent $SHELL命令后,我们也会自动进入到新创建的子shell中,centos中,默认shell通常为bash,所以,在centos中上述命令通常可以直接写为ssh-agent bash,当然,如果你的默认shell已经指定为其他shell,比如csh,那么你也可以直接使用ssh-agent csh,效果都是相同的,我们来实验一下。

    当前使用的centos系统的默认shell为bash,在未启动ssh-agent程序时,我们在当前bash中执行pstree命令,查看sshd的进程树,如下
    了解ssh代理:ssh-agent
    然后,执行ssh-agent $SHELL命令(注意:SHELL为大写),启动ssh代理,执行此命令后,再次使用pstree命令,查看sshd的进程树
    了解ssh代理:ssh-agent
    启动ssh代理后,查看sshd进程树,如下所示
    了解ssh代理:ssh-agent
    在原来的bash中新生成了一个子bash,ssh-agnet运行在子bash中,我们的命令也同样在子bash中执行。

    此时,在当前会话中,我们已经可以使用ssh-agent了,ssh-agent会随着当前ssh会话的消失而消失,这也是一种安全机制,比如,退出当前子shell,再次查看进程树。
    了解ssh代理:ssh-agent
    找到sshd的进程树,如下,如果你操作的非常快,可能会在与sshd进程平级的区域看到一个还没有来得及关闭的ssh-agent进程,但是最终sshd的进程树如下图所示。
    了解ssh代理:ssh-agent
    可以看到ssh-agent已经不再存在了,如果你的服务器中开启了图形化环境,使用ps -ef | grep ssh-agent命令查找ssh-agent进程,仍然能够看到一个ssh-agent进程,这个ssh-agent进程是跟随图形化界面开机启动的,但是通常,服务器中很少会开启图形化界面,所以我们不用在意它。

    虽然我们已经知道了怎样启动ssh-agent,但是,如果想让ssh代理帮助我们管理密钥,还需要将密钥添加到ssh代理中,这个话题一会儿再聊。

    刚才执行了ssh-agent $SHELL命令,现在试试 eval `ssh-agent` 命令。

    eval `ssh-agent`命令并不会启动一个子shell,而是会直接启动一个ssh-agent进程,示例如下
    了解ssh代理:ssh-agent
    找到进程树的如下部分
    了解ssh代理:ssh-agent
    可以看到,ssh-agent进程已经启动了,此刻,如果我们推出当前bash,此ssh-agnet进程并不会自动关闭,所以,我们应该在退出当前bash之前,手动的关闭这个进程,在当前bash中,使用ssh-agent -k命令可以关闭对应的ssh-agent进程,但是,如果在退出了当前bash以后再使用ssh-agent -k命令,是无法关闭对应的ssh-agent进程的,除非使用kill命令,当然,其实在使用 ssh-agent $SHELL 命令时,也可以使用ssh-agent -k命令关闭ssh代理。

    好了,我们已经了解了怎样启动ssh代理,以及怎样关闭ssh代理,但是,我们还没有真正的使用过代理,如果想要真正的使用ssh代理帮助我们管理密钥,还需要将密钥添加到代理中,添加密钥需要使用到ssh-add命令

    ssh-add命令的使用方法非常简单,示例如下

    ssh-add ~/.ssh/id_rsa_custom

    上述命令表示将私钥id_rsa_custom加入到ssh代理中,如果你没有正确的启动ssh-agent,那么你在执行ssh-add命令时,可能会出现如下错误提示。

    Could not open a connection to your authentication agent.

    完成上述步骤后,ssh代理即可帮助我们管理id_rsa_custom密钥了,那么有哪些具体的使用场景呢,我们继续聊。

    ssh代理帮助我们选择对应的私钥进行认证

    前一篇文章中,我们总结了基于密钥进行认证的方法,比如,我们在生成密钥对时,可以手动指定密钥的名称,而不是使用默认的密钥名称,示例如下:
    了解ssh代理:ssh-agent
    如上图所示,我们没有使用默认名称id_rsa作为密钥名称,而是使用id_rsa_test1作为密钥的名称,生成了对应的密钥对。

    此时,我们想要使用新生成的密钥对免密码连接到10.1.0.3这台服务器,于是,我们需要完成如下操作
    了解ssh代理:ssh-agent
    如上图所示,我们将公钥id_rsa_test1.pub发送给了10.1.0.3的root用户,然后在A机器(10.1.0.1)上连接到C机器(10.1.0.3)时,仍然提示我们输入root@10.1.0.3的密码,这是因为ssh基于密钥进行认证时,默认会使用~/.ssh/id_rsa进行认证,当你使用非默认名称的私钥进行认证时,需要手动指明对应的私钥,如果不指明对应的私钥,ssh仍然会默认使用~/.ssh/id_rsa进行认证,上例就是这种情况,由于我们没有使用~/.ssh/id_rsa进行认证,同时没有指明对应的私钥,ssh会使用id_rsa与id_rsa_test1.pub进行匹配,它们本来就不是一对密钥,自然无法认证成功,所以ssh仍然提示我们输入密码,我们可以使用 -i 选项指定对应的私钥文件进行认证,示例如下
    了解ssh代理:ssh-agent
    如上图所示,指明对应的私钥后,即可正常的使用密钥进行认证,从而免去输入用户的密码。

    如果我们手中有很多密钥对,它们对应的公钥被不同的服务器所持有,那么,我们连接不同的服务器时,就需要手动指定对应的不同的私钥,而ssh代理可以帮助我们管理这些私钥,从而避免手动的指定私钥。

    示例如下
    了解ssh代理:ssh-agent
    如上图所示,我们启动了ssh-agent进程,然后将私钥id_rsa_test1加入到了ssh代理中,再次使用非默认名称的私钥进行认证时,并不用指明密钥,ssh-agent会帮助我们选择对应的私钥,进行正确的认证,当本机有多个密钥对,并且它们的公钥分布于很多不同的机器时,会非常有用。

    ssh代理能够免去重复输入私钥密码的操作

    当我们为私钥设置了密码,ssh基于密钥进行认证时,会提示输入私钥的密码,输入正确的私钥密码,才能够使用对应私钥进行认证,示例如下

    生成密钥对,同时指定私钥的密码

    ssh-keygen -f ~/.ssh/id_rsa_test2 -P'123456'

    将公钥添加到远程用户的公钥认证文件中,提示输入远程用户的密码。

    ssh-copy-id -i ~/.ssh/id_rsa_test2.pub root@10.1.0.3
    root@10.1.0.3’s password:

    指定对应私钥连接远程用户,提示输入对应私钥的密码,正确的输入私钥的密码,即可连接到远程用户
    ssh -i ~/.ssh/id_rsa_test2 root@10.1.0.3
    Enter passphrase for key ‘/root/.ssh/id_rsa_test2’:
    但是,如果为私钥设置了密码,每次使用私钥进行认证连接是,都会要求输入私钥密码,如果你在当前ssh会话中需要反复的连接到远程用户,那么反复的输入复杂的私钥密码,的确会比较麻烦,ssh-agent可以帮助我们,在一个ssh会话中,只要输入一次私钥密码,在同一ssh会话中之后再次使用到相同的私钥时,即可不用再次输入对应密码,示例如下。
    了解ssh代理:ssh-agent
    如上图所示

    第1步:启动ssh代理

    第2步:将对应私钥添加到ssh代理中,在添加私钥时,会提示输入私钥的密码,此时,正确的输入私钥密码即可将私钥添加到ssh代理中。

    第3步:连接到远程用户,并使用对应私钥进行认证,已经不用输入私钥密码,即可连接到远程用户,从远程用户的会话中退出,回到当前ssh会话中。

    第4步:在当前会话中,再次连接到远程用户,同样没有提示输入密码。

    从上述示例可以看出,在同一个ssh会话中,ssh-agent可以帮助我们免去重复输入私钥密码的操作。

    管理ssh代理中的密钥

    如果我们想要查看ssh代理中已经添加了哪些私钥,该怎样查看呢?使用ssh-add -l即可查看,示例如下
    了解ssh代理:ssh-agent
    如上图所示,id_rsa_test1与id_rsa_test2这两个RSA类型的私钥已经被添加到了ssh代理中。

    我们还可以列出代理中所有私钥对应的公钥内容,示例如下
    了解ssh代理:ssh-agent
    如果我们想要从代理中移除某个已经添加的私钥,可以使用ssh-add -d命令指定要移除的私钥,示例如下
    了解ssh代理:ssh-agent
    我们也可以一次性清空代理中的所有私钥,使用ssh-add -D命令即可。

    如果我们想要临时锁定ssh代理,则可以对ssh代理添加密码,并进行锁定,锁定后的ssh代理无法继续帮助我们管理私钥,除非解锁以后,才能正常的帮助我们管理私钥,示例如下,在正常情况下,ssh代理可以帮助我们管理私钥,我们可以使用ssh-add -x命令对代理加锁,加锁时会提示输入密码,这个密码在解锁时需要用到,加锁后,再次连接远程用户时,ssh代理已经失效,除非我们对代理进行解锁,使用ssh-add -X命令(大写X)对代理解锁,解锁时需要输入加锁时设定的密码,解锁后,ssh代理恢复正常。
    了解ssh代理:ssh-agent

    总结

    启动ssh-agent

    如下两种方式均可启动ssh-gent
    方式一:创建子shell,在子shell中运行ssh-agent进程,退出子shell自动结束代理。
    ssh-agent $SHELL
    方式二:单独启动一个代理进程,退出当前shell时最好使用ssh-agent -k关闭对应代理
    eval `ssh-agent`

    关闭ssh-agent
    ssh-agent -k

    将私钥添加到ssh代理
    ssh-add ~/.ssh/key_name

    查看代理中的私钥
    ssh-add -l

    查看代理中的私钥对应的公钥
    ssh-add -L

    移除指定的私钥
    ssh-add -d /path/of/key/key_name

    移除代理中的所有私钥
    ssh-add -D

    锁定ssh代理
    锁定时需要指定锁定密码,锁定后的ssh代理暂时不能帮助我们管理私钥
    ssh-add -x

    解锁ssh代理
    解锁时需要输入创建锁时设定的密码,解锁后ssh代理可正常工作
    ssh-add -X

    展开全文
  • ansible-role-ssh-agent

    2021-02-17 03:56:38
    [许可证:麻省理工学院]( stegmannb / ansible-role-ssh-agent)]( stegmannb / ansible-role-ssh- agent / blob / master / LICENSE)![持续集成]( stegmannb / ansible-role-ssh-agent /workflows/Continuous ...
  • sshssh-agentssh-add

    2021-03-09 11:07:23
    ssh-agent解决的问题 当我们的主机有多个密钥对(例如:root用户生成了一对公钥私钥对,hmk用户生成了另外一对公钥私钥对),我们连接到其他不同的多台主机时,可能用的认证用户不一样,这时候需要我们手动指定使用...

    ssh 推荐的登录方式是使用私钥登录。但是如果生成私钥的时候,设置了口令/密码(passphrase),每次登录时需要输入口令也很麻烦。可以通过 ssh-agent 来管理私钥,把私钥加载进内存,之后便不用再输入密码。

    ssh-agent解决的问题

    当我们的主机有多个密钥对(例如:root用户生成了一对公钥私钥对,hmk用户生成了另外一对公钥私钥对),我们连接到其他不同的多台主机时,可能用的认证用户不一样,这时候需要我们手动指定使用哪个密钥,一旦机器过多输入会非常繁琐,ssh-agent能帮我们管理这些密钥对
    当我们给私钥加了密码,而我们的认证方式又选择了密钥认证,ssh-agent可以帮助我们免去输入密码的繁琐操作

    ssh-agent 代理

    ssh-agent 的原理如下图:
    在这里插入图片描述
    用户 Bob 使用 ssh-agent 来管理私钥之后。ssh-agent 会启动一个进程在内存里保存这些私钥。之后每次登录时,ssh 客户端都会跟 ssh-agent 请求是否有目标主机的私钥;如果有,ssh 客户端便能直接登录目标主机。

    操作步骤如下:

    1、通过 ssh-agent bash 或者 eval ssh-agent (这里是shell 的命令替换符)来启动。

    2、通过 ssh-add Identity_Linux 为 ssh-agent 添加私钥。这里的 Identity_Linux 是我的私钥文件。

    添加之后,可通过 ssh-add -l 来查看已经添加的私钥。

    在这里插入图片描述
    第一条命令,因为服务器设置了只能使用私钥认证登录,所以直接登录失败了。如果私钥不是放在 ssh 客户端缺省读取的位置或者不是默认的名字,就需要使用 -i 选项显示的指定私钥文件。 在给代理添加私钥时,需要输入一次私钥的口令。准备就绪之后,之后不再指定私钥也不需口令即可登录了。

    ssh-agent原理

    ssh-add 这个命令不是用来永久性的记住你所使用的私钥的。实际上,它的作用只是把你指定的私钥添加到 ssh-agent 所管理的一个 session 当中。而 ssh-agent 是一个用于存储私钥的临时性的 session 服务,也就是说当你重启之后,ssh-agent 服务也就重置了。

    如果是为了永久记住对应的私钥是哪个,我们不能依赖 ssh-agent 服务。能依赖什么则取决于以下哪些方案适合你的使用场景。

    当你电脑重启

    ssh-add

    选项

    -D:删除ssh-agent中的所有密钥.
    -d:从ssh-agent中的删除密钥
    -e pkcs11:删除PKCS#11共享库pkcs1提供的钥匙。
    -s pkcs11:添加PKCS#11共享库pkcs1提供的钥匙。
    -L:显示ssh-agent中的公钥
    -l:显示ssh-agent中的密钥
    -t life:对加载的密钥设置超时时间,超时ssh-agent将自动卸载密钥
    -X:对ssh-agent进行解锁
    -x:对ssh-agent进行加锁
    

    实例

    1、把专用密钥添加到 ssh-agent 的高速缓存中:

    ssh-add ~/.ssh/id_dsa
    

    2、从ssh-agent中删除密钥:

    ssh-add -d ~/.ssh/id_xxx.pub
    

    3、查看ssh-agent中的密钥:

    ssh-add -l
    

    参考文档

    https://www.cnblogs.com/f-ck-need-u/p/10484531.html
    https://zhuanlan.zhihu.com/p/126117538
    https://blog.csdn.net/zhouguoqionghai/article/details/92134462
    https://segmentfault.com/q/1010000000835302

    展开全文
  • yubikey-agent是YubiKeys的无缝ssh-agent。 yubikey-agent yubikey-agent是YubiKeys的无缝ssh-agent。 易于使用。 一个命令的设置,一个环境变量,它仅在后台运行。 坚不可摧。 允许拔出,Hibernate和挂起。 无需...
  • ssh-copy-id可将密钥对中的公钥拷贝到服务器上的authorized_keys文件中,实际为追加到文件末。 以下演示其过程。 首先生成密钥对,此处设置了passphrase,密钥对生成在当前目录。 $ ssh-keygen Generating public/...
  • Git如何生成多个ssh key添加到ssh-agent管理项目,gitssh-agentGit如何生成多个ssh key添加到ssh-agent管理项目生成新的ssh密钥ssh-keygen -t rsa -b 4096 -C "your@example.com"不要一直回车键,输入新的名称 id_...
  • ssh-agent-确认 通过 SSH 命令行确认您的 SSH 密钥的使用。 设置 获取内核的对等偏移量(请参阅 find_gdb_offset 目录); 运行 .sh 脚本并复制最后一行。 将其放入 netstat_unix (struct_unix_sock__peer_offset) ...
  • 连接到本地 ssh-agent 的 crtauth-java 中 Signer 接口的实现。 如果您想查看使用此代码的工作示例,请查看分支agentsigner中的 (要对其进行测试,您需要将 id_rsa.pub 替换为一个公钥,该公钥在您的ssh 代理) ...
  • lastpass-ssh-agent 免责声明:该程序是实验性的。 如果您对安全性很敏感,请不要使用它,因为它可能会使您未加密的私钥泄漏到RAM和交换中。 什么 lastpass-ssh-agent是一个ssh代理,它使用从lastpass保管库存储为...
  • 之前有详细介绍SSH密钥方式登录,SSH端口转发 ,以及X11转发,可点击如下原链接查看结合下面拓扑图模拟演示并介绍SSH代理(ssh-agent)及SSH代理转发(agent-forwarding)功能 Server_A: 192.168.31.80Server_B: 192.168....
  • 在Secure Shell扩展中创建新连接时,将--ssh-agent=eechpbnaifiimgajnomdipfaamobdfha添加到“ SSH中继服务器选项”字段中,以指示它应使用SSH代理作为密钥。 学分 部分代码和方法很大程度上基于 Chrome扩展。 特别...
  • ssh-agent 详解

    万次阅读 2019-06-15 18:54:05
    此博客的配图来自《SSH The Secure Shell 2nd》,内容也是对该书相关章节的总结与一些...可以通过 ssh-agent 来管理私钥,把私钥加载进内存,之后便不用再输入私钥。 ssh-agent 代理 ssh-agent 的原理如下图: ...
  • ssh-agent

    2019-01-08 09:17:22
    ssh-agent是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。 $eval `ssh-agent -s` 注意这里是反引号 $ssh...
  • Windows 中让 ssh-agent 支持 Git
  • 介绍如何在本地给多个git服务器设置ssh配置,并对相关的ssh config进行的详细解释,最后介绍了ssh-agent的使用方式
  • Git Bash + Chocolate,以及 ssh-agent的小脚本1 Git Bash 和 Chocolate2 为ssh-agent 写个脚本3 碰到的问题3.1 runas 不起作用3.2 运行编写的脚本,但是没有代理3.3 关于打开agent后,agent的服务的状态参考 ...
  • ssh-add命令是把专用密钥添加到ssh-agent的高速缓存中。该命令位置在/usr/bin/ssh-add。 语法格式:ssh-add [参数] 常用参数: -D 删除ssh-agent中的所有密钥 -d 从ssh-agent中的删除密钥 -l 显示ssh-agent中...
  • ![图片说明](https://img-ask.csdn.net/upload/202009/22/1600744737_293310.png) 之前的步骤按照教程 ...安装SSH时遇到了这个问题,在服务中停止了OpenSSH Authentication Agent但是还是有这个报错,无法安装。
  • node-ssh-agent是绑定到“纯” node.js的SSH代理协议的客户端。 目前,支持的操作是“列表键”和“签名数据”(在SSH中,这是requestIdentities和sign 。 用法 var SSHAgentClient = require('ssh-agent'); var ...
  • SSHssh-agent介绍

    千次阅读 2017-05-14 14:09:47
    ssh-agent在X会话或登录会话之初启动,所有其他窗口或程序则以客户端程序的身份启动并加入到ssh-agent程序中。通过使用环境变量,可定位代理并在登录到其他使用ssh机器上时使用代理自动进行身份验证。不同于ssh,...
  • 将本地的私钥ssh-key添加到ssh-agent

    千次阅读 2020-03-18 16:20:25
    mac笔记本中一般都在 根目录下的 .ssh隐藏文件夹中 cd ~/.ssh 进入之后可以看一下本地有多少个私钥,然后诶个诶个加上即可。查看有两种方式一种是 open . 会打开该路径下的文件,可以查看到对应的文件 或者直接在...
  • ssh-server与ssh-agent

    千次阅读 2018-11-14 11:59:19
    ssh-server与ssh-agent Ubuntu 桌面版默认没有安装 ssh-server Ubuntu server版默认没有安装 ssh-client 在集群搭建中,需要集群中全部机器都具有两种服务进程 使用命令 ps -e | grep ssh 可以查看ssh服务的运行情况...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,584
精华内容 17,833
关键字:

ssh-agent