linux+如何测量登录到远程机器之前的ssh时间



我们想要测量ssh成功登录到远程机器所需的时间

是否可以测量登录到远程机器之前的ssh时间?

注意-所有机器都是RHEL机器

例如

假设我们想验证从machine_Y登录machine_X需要多少时间

来自machine_Y的示例

machine_X is machine_[1..100]

ssh time until login to machine1 was 2 sec
ssh time until login to machine2 was 6 sec
ssh time until login to machine3 was 12 sec
ssh time until login to machine4 was 3 sec
.
.
.
#!/bin/bash
# using bash variable SECONDS 
for srv in machine_{1..100}; do
START=$SECONDS;        
ssh "$srv" /usr/bin/true; 
printf "ssh time until login to %s was %s secn" "$srv" "$((SECONDS-START))"; 
done

ssh time until login to machine1 was 1 sec
ssh time until login to machine2 was 0 sec
ssh time until login to machine3 was 0 sec
ssh time until login to ...      

对于每个ssh,在本地打印以epoch秒为单位的日期,然后远程打印epoch秒,然后做减法:

user='whatever'
for machine_X in machine_{1..100}; do
{ date +%s; ssh "${user}@${machine_X}" 'date +%s'; } |
awk -v mc="$machine_X" '
NR%2 { begSecs=$1; next }
{ printf "ssh time until login to %s was %d secn", mc, $1 - begSecs }
'
done

我们正在远程进行对date的第二次调用,因此我们只考虑使用ssh登录的时间,而不考虑再次登录的时间(如果我们在本地同时调用date(。

我们使用命令分组来调用date和ssh,以最大限度地减少这些调用期间和调用之间的开销(从而增加不相关的时间(。例如,我们没有使用进程替换(time=$(date...)(,因为这会增加开销,因为shell通常必须创建一个临时文件,并在将其分配给变量之前将命令的结果写入其中,因此您将在ssh登录时添加执行此操作所需的时间。这使得awk代码比我们使用其他方法在一行上输出两个时间戳稍微复杂一些,但这是一个很好的折衷。

如果机器上的时间是准确的,并且您有最新版本的GNU date,这将测量纳秒级的时间差:

#!/bin/bash
for srv in machine_{1..100}; do
start="$(date +%s.%N)"
end="$(ssh "$srv" date +%s.%N)"
diff="$(bc <<< "$end - $start")"
test "${diff:0:1}" = . && diff="0$diff"
echo "ssh time until login to $srv was $diff seconds."
done

最新更新