gpt4 book ai didi

linux - 开始新 session 后如何获取当前的ssm sessionId?

转载 作者:行者123 更新时间:2023-12-02 18:52:54 25 4
gpt4 key购买 nike

我尝试在启动 session 后获取当前的 aws ssm sessionId。我可以看到当我启动它时它会被打印出来,就像这样

Starting session with SessionId: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8ffbeafcfbcffbeafcfba1ece0e2a2bfe9fbf5bab6ebbdbdb7baebb9b8e9edba" rel="noreferrer noopener nofollow">[email protected]</a>

但我不知道这是从哪里来的。

我还可以看到我可以从 ssm-session 工作人员那里获取它,但我正在尝试以更干净的方式获取它:

[ssm-user@ip-100-66-11-11 bin]$ sudo systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
Loaded: loaded (/usr/lib/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-03-08 09:54:44 UTC; 2h 48min ago
Main PID: 3092 (amazon-ssm-agen)
CGroup: /system.slice/amazon-ssm-agent.service
├─ 875 /usr/bin/ssm-session-worker <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d8acbdabac98acbdabacf6bbb7b5f5e8beaca2ede1bceaeae0edbceeefbebaed" rel="noreferrer noopener nofollow">[email protected]</a> i-0a7bb9a9064ccc96
├─ 886 bash -l
├─3092 /usr/bin/amazon-ssm-agent
└─3272 /usr/bin/ssm-agent-worker

最佳答案

我找到了两个解决方案。第一个是使用代理在 /var/lib 路径上写入的内容,因为它在那里写入与 ssm session ID 匹配的 channel 名称。我们可以这样检索它:

# gets the EC2 instance ID
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
# the most recent channel matches the current ssm session id
sudo ls -t /var/lib/amazon/ssm/${INSTANCE_ID}/channels | head -1

另一个选项是 AWS 支持人员向我提供的,它基于登录 shell 的 PID。如果您直接在 session shell 中运行它,它将是 SSM session 工作线程的 PID。该循环将一直运行,直到找到 SSM session 工作线程,然后从参数中提取 session ID,或者直到不存在父进程为止。要运行它,您需要 sudo 访问权限并使用 sudo 运行它。即使使用 sudo su 仍然可以工作。 $PPID是当前进程的父进程的id。

#!/bin/bash

PROCESSID=$PPID
while [ $PROCESSID ]
do
SESSIONWORKERPID=$(ps -o ppid= -o args= -p $PROCESSID 2> null)
if [[ "$SESSIONWORKERPID" =~ .*ssm-session-worker.* ]]; then
if [[ "$SESSIONWORKERPID" =~ .*?[[:space:]](.*?)[[:space:]].* ]]; then
echo ${BASH_REMATCH[1]}
fi
break;
fi
PROCESSID=$(ps -o ppid= -p $PROCESSID 2> null)
if [[ ! $PROCESSID ]]; then
echo "Session Id Not Found"
fi
done

关于linux - 开始新 session 后如何获取当前的ssm sessionId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66530126/

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