unix 如何使用shell脚本将服务器主机的详细信息自动添加到变量/文件中

mutmk8jj  于 2023-03-12  发布在  Unix
关注(0)|答案(2)|浏览(176)

/home/user/.ssh/known_host文件中,我们可以获得主机服务器名称的所有详细信息。

Ex - hostname.abcs.com,129.167.29.11 ssh.rsa <encryption-key>

shell 脚本,如-

#!/bin/bash
HOST=$1
IP_ADDR=$2
ENC_TYP=$3
KEY=$4
.........

然后需要在第一个变量(HOST)中添加主机名详细信息,在第二个变量中添加IP地址,加密类型和加密密钥到变量中。

[] > cat HOST

然后输出为hostname.abcs.com

[] > cat IP_ADDR

然后输出为129.167.29.11
或者我们也可以将所有这些详细信息添加到一个文件中,如hostname.txt。因此,我需要添加shell脚本,以便在文件或变量中自动添加服务器主机详细信息。

qqrboqgw

qqrboqgw1#

主机名可能在第一列,但第一列也可能是@revoked@cert-authority,在这种情况下,主机名在第二列,我们现在将忽略这个问题,并假设您没有任何类似的行(如果您有,您可能可以很容易地用awk过滤掉它们)。

  • 如果 * 您的文件是这样的,每行的第一个条目的形式是name,ip_address,您可以摆脱一些简单的东西,如:
#!/bin/bash

while IFS=' ,' read name ip_addr key_type b64_enc_key comment; do
        if ! test "$name" = "${name#@}"; then
                echo "WARNING: unexpected marker $name found" >&2
                continue
        fi
        # more validation is a good idea
        echo host = "$name"
        echo ip = "$ip_addr"
        echo type = "$key_type"
        echo key = "$b64_enc_key"
done < known_hosts

但请注意,hostnames字段可能只有一个条目(即,它不包含任何逗号),也可能多于2个条目(即,它包含多于1个逗号),在这种情况下,所有这些列计数都将是错误的,并且这些字段将位于错误的变量中。您应该比上面所做的更仔细地确保数据的有效性!

d8tt03nd

d8tt03nd2#

如果我没理解错的话,从输入行阅读几个值(用逗号或空格分隔)并将它们放入单独的变量中的答案是使用next命令:

#!/bin/bash
while IFS=", " read HOST IP_ADDR ENC_TYP KEY 
  do 
    # for each line in the input file, do something
    echo HOST=$HOST IP_ADDR=$IP_ADDR etc.
  done < /home/user/.ssh/known_host

就输入而言,您的文件/home/user/.ssh/known_host与您所说的相匹配。

相关问题