我使用kitty终端模拟器,所以当我连接到一个新服务器时,我(通常(需要广告terminfo(至少,这样它似乎可以工作(。为了做到这一点,我写了一个剧本。当我在做的时候,我添加了一些代码来添加公钥,如果用户想要的话。与这个问题无关,但这里有代码:
#!/bin/bash
host=$1
ip=$(echo $host | cut -d@ -f2 | cut -d: -f1)
# Check if it is a unknown host
if [[ -z $(ssh-keygen -F $ip) ]]; then
# Check if there are any ssh-keys
if [ $(ls $HOME/.ssh/*.pub > /dev/null | wc -l) -ne 0 ]; then
keys=$(echo $( (cd $HOME/.ssh/ && ls *.pub) | sed "s/.pub//g" ))
ssh -q -o PubkeyAuthentication=yes -o PasswordAuthentication=no $host "ls > /dev/null 2>&1"
# Check if the server has one of the public keys
if [ $? -ne 0 ]; then
echo "Do you want to add a SSh key to the server?"
while true; do
read -p " Choose [$keys] or leave empty to skip: " key
if [[ -z $key ]]; then
break
elif [[ -e $HOME/.ssh/$key ]]; then
# Give the server a public key
ssh $host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo "$(cat $HOME/.ssh/$key.pub)" >> ~/.ssh/authorized_keys"
break
else
echo "No key with the name "$key" found."
fi
done
fi
fi
# Copy terminfo to server
ssh -t $host "echo "$(infocmp -x)" > "$TERM.info" && tic -x "$TERM.info" && rm $TERM.info"
fi
这不是最好的代码,但它似乎可以工作。小费当然是受欢迎的。
问题是,每次连接到新的远程服务器时,我都需要运行这个脚本(或者我需要跟踪哪个服务器是新的,但这更糟(。有没有一种方法可以在每次连接到服务器时运行此脚本(该脚本检查ip是否为已知主机(。或者有其他方法可以做到这一点吗?添加公钥很好,但不是很重要。
我希望有人能帮忙,谢谢
有一个技巧可以识别您正在使用ssh
登录目标机器:
pgrep -af "sshd.*"$USER |wc -l
上述命令将使用sshd
对用户的进程进行计数
您可以在目标机器中添加上述命令,以测试您是否通过ssh
连接。将上述命令添加到目标计算机中的.profile
或.bash_profile
脚本中。
因此,只有当您通过ssh
登录时,当您登录/连接时,您的脚本才会在目标计算机上运行初始化脚本。
目标机器上的示例.bash_profile
#!/bin/bash
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
if [[ $(pgrep -af "sshd.*"$USER |wc -l) -gt 0 ]]; then
your_init_script
fi