我正在编写一个脚本,允许我一次从所有服务器检索文件。我有 SSH 密钥以便登录我的服务器。但是,我的 SSH 密钥需要密码。
我正在编写的脚本不会自动化,它只会手动运行。所以我的脚本会提示用户输入 SSH 密钥密码。
我如何在连接到每个服务器时将密码发送到 SSH 密钥。我试图避免为每台服务器输入我的密码。
我知道我可以使用“期望”,但我希望有一种简单的方法可以做到这一点。也许一些环境变量?
谢谢。
在 openssh Red Hat 包中,我注意到ssh-agent可执行文件具有 SGID 权限集:
$ ls -l /usr/bin/ssh-agent
-rwxr-sr-x 1 root nobody 113648 Nov 24 2010 /usr/bin/ssh-agent
Run Code Online (Sandbox Code Playgroud)
为什么openssh 开发人员要ssh-agent与该nobody组一起运行?或者我可能误解了 SGID 的作用?
我有一个 ssh 脚本,它在远程系统上使用 ssh 密钥转发来在更远程的系统中执行操作。
我必须在屏幕会话中运行脚本,以便我可以从中分离。但是需要存在通过 ssh-key-forwarding 授予远程系统的授权。至少在脚本完成之前。
任何想法如何去做?
我已经使用这个 bitbucket 教程来提供对 git repo 的 ssh 访问:https ://confluence.atlassian.com/pages/viewpage.action?pageId=270827678
但是现在每次我想使用 git 时,它都会说我没有权限,直到我这样做:
ssh-agent /bin/bash
&&
ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我在我的本地机器上很容易做到了,但是远程服务器不能正常工作。
更新
当我做
ssh-agent
Run Code Online (Sandbox Code Playgroud)
我明白了
SSH_AUTH_SOCK=/tmp/ssh-blGr6z5dJjit/agent.14183; export SSH_AUTH_SOCK;
SSH_AGENT_PID=14184; export SSH_AGENT_PID;
echo Agent pid 14184;
Run Code Online (Sandbox Code Playgroud)
但比我尝试做 git fetch 时,我得到了这个:
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
即使在我添加了密钥之后
ssh-add ~/.ssh/bitbucket
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
Could not open a connection to your authentication agent.
Run Code Online (Sandbox Code Playgroud) 我正在使用 Ubuntu 服务器 10.04。
ssh-add /foo/cert.pem 给出了以下输出:
无法打开与您的身份验证代理的连接。
这些是我正在运行的进程:
ps -aux | grep ssh
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
root 1523 0.0 0.0 49260 632 ? Ss Dec25 0:00 /usr/sbin/sshd
root 10023 0.0 0.3 141304 6012 ? Ss 12:58 0:00 sshd: padmin [priv]
padmin 10117 0.0 0.1 141304 2400 ? S 12:58 0:00 sshd: padmin@pts/1
padmin 11867 0.0 0.0 7628 964 pts/1 S+ 13:06 0:00 grep --color=auto ssh
root 31041 0.0 0.3 141264 5884 ? …Run Code Online (Sandbox Code Playgroud) 我在 cygwin 下使用 ssh-agent 时遇到问题。疯狂的部分是它正在工作,但有一天重启后停止了。下面是一个例子:
sthomas@sthomas-tcg ~
$ keychain ~/.ssh/id_rsa
KeyChain 2.6.8; http://www.gentoo.org/proj/en/keychain/
Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL
* Initializing /home/sthomas/.keychain/sthomas-tcg-sh file...
* Initializing /home/sthomas/.keychain/sthomas-tcg-csh file...
* Initializing /home/sthomas/.keychain/sthomas-tcg-fish file...
* Starting ssh-agent
* Adding 1 ssh key(s)...
Enter passphrase for /home/sthomas/.ssh/id_rsa:
Identity added: /home/sthomas/.ssh/id_rsa (/home/sthomas/.ssh/id_rsa)
sthomas@sthomas-tcg ~
$ ssh-add
Could not open a connection to your authentication agent.
sthomas@sthomas-tcg ~
$ ssh stage
Enter passphrase for key '/home/sthomas/.ssh/id_rsa':
Run Code Online (Sandbox Code Playgroud)
我发现这个用户和我有完全相同的问题
不幸的是,我没有足够的代表在那里发表评论。我尝试按照他的指示进行操作,但第一步对我不起作用:
sthomas@sthomas-tcg ~
$ `eval …Run Code Online (Sandbox Code Playgroud) 似乎我在配置的两个帐户的 ssh-agent 行为之间存在一些差异。
我编写了一个简单的监控脚本来检查我们正在运行的某些 VM 的可用性。我使用我的主要访问帐户进行了所有测试和调试。在此过程中,我生成了一个 SSH 密钥对,启动了 ssh-agent,并将身份添加到代理中,以允许脚本在不需要密码的情况下进行 ssh。
现在,我想以服务帐户用户身份运行此脚本。我创建了服务帐户,并生成密钥,将登录 shell 临时设置为 /bin/bash。我生成了我的密钥,删除了密码,并将身份添加到代理中。
差异似乎与外壳如何连接到代理有关。在我的用户帐户中,自从我开始测试(大约两周)以来,我没有重新启动代理。但是,当我尝试在服务帐户下运行脚本时,似乎每次都必须重新启动代理,添加身份,然后执行工作。
理想情况下,我希望代理无限期运行并让服务帐户在脚本运行时自动重新连接到它,这样我就不需要在脚本中管理进程。我查看了每个帐户的配置,没有发现任何差异。任何见解将不胜感激。
**编辑:我忘了指出代理确实持续运行,但服务帐户的 shell 进程似乎没有使用它,必须启动一个新的进程:
ovmmon 14043 0.0 0.0 53916 204 ? Ss May17 0:00 ssh-agent
ovmmon 14952 0.0 0.0 53916 204 ? Ss May17 0:00 ssh-agent
Run Code Online (Sandbox Code Playgroud) 我有一堆 ssh 密钥半永久性地加载到 ssh-agent 中。ssh-add -L列出 6 个键。
我还有其他单独存储的密钥;比方说,在 USB 记忆棒上。我正好不希望妥善保管所有的时间。让我给其中之一打电话square.key。
问题是:在我需要的时候square.key,我可以插入 USB 记忆棒并指定-i /path/to/square.key— 但它不起作用。-v揭示了原因:
debug1: Will attempt key: /home/ulidtko/.ssh/key1 RSA SHA256:<redacted> agent
debug1: Will attempt key: /home/ulidtko/.ssh/key2 RSA SHA256:<redacted> agent
debug1: Will attempt key: key3@localhost ED25519 SHA256:<redacted> agent
debug1: Will attempt key: key4@localhost RSA SHA256:<redacted> agent
debug1: Will attempt key: key5@localhost ed25519 ED25519 SHA256:<redacted> agent
debug1: Will attempt key: key6@localhost ECDSA SHA256:<redacted> agent
debug1: …Run Code Online (Sandbox Code Playgroud) 我是这个社区的新手,我正在开发我的物联网项目,其中我的微控制器作为服务器工作,获取数据并执行请求。我的客户端是终端设备(手机、平板电脑),我通过 SSH 连接。
如果我的互联网突然断开,问题就会出现 - ssh 会话中断,我必须再次使用以下命令重新配置它:
ssh -o TCPKeepAlive=yes -R 80:192.145.47.33:80 example@ssh.localhost.run
Run Code Online (Sandbox Code Playgroud)
以类似的方式,如果服务器(微控制器)的电源断开,那么我会遇到类似的情况。我希望该会话能够自动配置而无需手动干预。
我有一个远程 CentOS 服务器,假设它叫做 hostname.com
hostname.com 有多个用户帐户,我想以这些用户中的任何一个(使用 ssh 密钥而不是密码)通过 ssh 进入该服务器。
似乎每个人都建议只更改我的本地 ssh 配置,为每个远程用户添加服务器别名,然后为每个别名提供不同的 IdentityFile。
那么我必须ssh bob@aliased_hostname1和ssh alice@aliased_hostname2
还有其他解决方案吗?我宁愿不通过 ssh 进入别名主机名
理想我只想ssh bob@hostname.com或ssh alice@hostname.com自动选择正确的ssh密钥文件的基础上,远程用户名我试图登录为。
我ssh-agent在密钥服务器上有我的 github.com 私有 ssh 密钥。在 NAT 后面的家用计算机上,我想运行git pull并使用我的 github ssh 密钥。
我知道这样做的唯一方法是 ssh 进入密钥服务器并转发端口 22,然后在转发代理的同时 ssh 回到我的家用计算机,然后git pull像这样在新的 shell 中运行:
home$ ssh keyserver -R10022:localhost:22
keyserver$ ssh -A localhost -p10022
home$ git pull
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来使用远程 ssh 密钥?
美好的一天,我一整天都在阅读类似的主题,但不幸的是找不到适合我情况的答案。所以这就是我想要做的。我有很多函数的 shell 脚本,其中一个函数假设调用 ssh-agent:
sh_agent_run () {
case "$(pidof ssh-agent | wc -w)" in
0) echo "SSH agent is not running. Startting SSH agent."
eval `ssh-agent -s`
ssh-add ${ssh_key}
;;
1) echo "SSH agent is running. Nothing to do."
;;
*) echo "Too much instances of SSH agent is running. Stopping SSH agent instances and running just one"
while pidof ssh-agent; do
echo "Stopping ssh-agent..."
killall -9 ssh-agent
sleep 1
done
echo "Starting valid SSH agent instance"
eval `ssh-agent -s` …Run Code Online (Sandbox Code Playgroud) ssh-agent ×12
ssh ×11
ssh-keys ×6
linux ×4
bash ×2
scripting ×2
centos ×1
cygwin ×1
gnu-screen ×1
permissions ×1
redhat ×1
shell ×1
ssh-keygen ×1
ssh-tunnel ×1
ubuntu ×1