gpt4 book ai didi

linux - 在脚本中启动 shell

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:45 25 4
gpt4 key购买 nike

我正在尝试编写一个脚本,该脚本将链接到我的 .fvwmrc 并基本上启动大量 shell 并自动以特定用户身份通过​​ ssh 连接到特定机器。

例如:

我点击我的 fvwm 菜单中的一个按钮(例如 goToChicago_AsPro)——这个按钮运行脚本。该脚本启动四个 shell - 每个 shell 自动以用户“pro”身份通过 ssh 连接到预定义的机器。

现在这是我的问题:

当我以用户“pro”ssh 连接到这些机器时,我需要输入密码。我不介意这个。本质上,我想要的是单击“goToChicago_AsPro”,然后会弹出四个 shell,每个 shell 都会以用户“pro”身份通过 ssh 连接到正确的机器,并等待我输入“pro”用户密码。

相反 - 当我测试时会发生什么......我运行脚本的 shell 将询问我专业密码然后启动一个 shell 以 pro 身份通过 ssh 连接到机器然后基本上什么都不做。

注意:无密码 ssh 的 ssh-keygen 不适合我。

请参阅下面我的部分脚本:

mapfile -t hosts < /tmp/ChicagoHosts
NUMBEROFHOSTS=${hosts[@]}

echo ${hosts[1]}
echo ${hosts[2]}
echo ${hosts[3]}
echo ${hosts[4]}

exec ssh ${hosts[1]} -l pro xterm -display $HOSTDISPLAY -ls -fn fixed -geometry 155x43+1922+0 -sl 10000
exec ssh ${hosts[2]} -l pro xterm -display $HOSTDISPLAY -ls -fn fixed -geometry 155x43-0+0 -sl 10000
exec ssh ${hosts[3]} -l pro xterm -display $HOSTDISPLAY -ls -fn fixed -geometry 155x43+1922+0 -sl 10000
exec ssh ${hosts[4]} -l pro xterm -display $HOSTDISPLAY -ls -fn fixed -geometry 155x43-0+0 -sl 10000

我也试过这个但没有成功:

exec xterm -display $HOSTDISPLAY -ls -fn fixed -geometry 155x43+1922+0 -sl 10000 "`ssh ${hosts[1]} -l pro`"

当我将 set -vx 添加到我的脚本时,这就是它吐出的内容:

sts < /tmp/fixHosts.txt
+ mapfile -t hosts
NUMBEROFHOSTS=${hosts[@]}
+ NUMBEROFHOSTS='uk-chicago-000 uk-chicago-002 uk-chicago-003'

echo ${hosts[0]}
+ echo uk-chicago-000
uk-chicago-000
echo ${hosts[1]}
+ echo uk-chicago-002
uk-chicago-002
echo ${hosts[2]}
+ echo uk-chicago-003
uk-chicago-003
echo ${hosts[3]}
+ echo

echo ${hosts[4]}
+ echo

exec ssh ${hosts[1]} -l pro xterm -display $HOSTDISPLAY -ls -fn fixed -geometry 155x43+1922+0 -sl 10000
+ exec ssh uk-chicago-002 -l pro xterm -display bruce:0.0 -ls -fn fixed -geometry 155x43+1922+0 -sl 10000
pro@uk-chicago-000's password:

此时脚本挂起。如果我输入密码,那么将启动一个 shell,并自动以 pro 身份通过 ssh 连接到 uk-chicago-000。它不会做任何其他事情。

请帮忙。试了很多东西就是不行。

最佳答案

你想要的是使用ssh-agent

我在代理下启动 X11

/usr/bin/ssh-agent startx -- -s 120 -v 2

然后在我的 .xinitrc(或等效的 X session 启动文件)中启动 fvwm 我有

if test -S "$SSH_AUTH_SOCK" -a -n "$SSH_AGENT_PID"; then
SSH_ASKPASS=/usr/local/bin/ssh-askpass ssh-add
fi
...
fvwm

这样您只需输入一次密码。

它的工作原理是设置一些传递给所有分支进程的环境变量,然后在需要身份验证时可以联系代理。

接下来,正如 Kadir 已经指出的那样,exec 替换 一个进程。如果 exec 成功,则脚本消失并且 exec 之后的命令不再运行。我建议你尝试在后台运行这四个脚本(注意 &):

ssh ${hosts[1]} -l pro xterm -display $HOSTDISPLAY ... &
ssh ${hosts[2]} -l pro xterm -display $HOSTDISPLAY ... &
ssh ${hosts[3]} -l pro xterm -display $HOSTDISPLAY ... &
ssh ${hosts[4]} -l pro xterm -display $HOSTDISPLAY ... &

关于linux - 在脚本中启动 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34352388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com