如何永久存储服务器密钥?打开连接

how to store server key permanently? openconnect

有没有办法在连接成功后存储服务器密钥, ssh 的方式?

无论连接多少次,我都必须输入“yes”才能 接受服务器密钥。我希望它能被接受并永远保存。

###############################
amir@amirpc:~$ sudo openconnect uk.cisadd.com -u myusername
POST https://uk.cisadd.com/
Attempting to connect to server xxx.xxx.xxx.xxx:443
SSL negotiation with uk.cisadd.com
Server certificate verify failed: signer not found

Certificate from VPN server "uk.cisadd.com" failed verification.
Reason: signer not found
Enter 'yes' to accept, 'no' to abort; anything else to view: 

Connected to HTTPS on XXX.XXX.XXX.XXX
###############################

可以将 bash 脚本写入 运行 打开连接并转义

我敢打赌,您可以使用选项 --no-cert-check 或拥有有效的 SSL 证书来做到这一点:

sudo openconnect --no-cert-check uk.cisadd.com -u myusername

如果您不介意流量被解密,可以使用 --no-cert-check。否则使用 --servercert=FINGERPRINT,其中 FINGERPRINT 是证书信息中显示的 "Server key hash"。

我 运行 在 OpenWRT 上遇到了同样的问题,我的解决方案是安装 'ca-certificates' 包。

# opkg install ca-certificates

我这样做后,openconnect 停止标记 'signer not found'。

此解决方案的好处是您使用的是预期的证书并限制您破坏网络的机会。

最好的方法是在您第一次登录服务器时像这样在剪贴板中保存您的 --servercert

echo "password" | sudo openconnect  -u username  uk2.cisadd.com --servercert sha25:xxxxxxx

openconnect 版本 7.0.6 中不再有 --no-cert-check 选项。 通过这种方式,我执行了以下步骤以作为 shell 脚本绕过此问题:

首先需要服务器认证,可以通过如下方式找到:

echo <password> | sudo openconnect <hostname> --user=<username> --passwd-on-stdin --no-dtls   

然后你必须从预期输出中找到 --servercert 值,如下所示:

...
SSL negotiation with xxxxxxx
Server certificate verify failed: signer not found

Certificate from VPN server "xxxxxxx" failed verification.
Reason: signer not found
To trust this server in future, perhaps add this to your command line:
    --servercert pin-sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  <--- Here it is
Enter 'yes' to accept, 'no' to abort; anything else to view: fgets (stdin): Operation now in progress

最后,复制认证码后你就可以编写你的bash脚本如下:

echo <password> | sudo openconnect <hostname> --user=<username> --passwd-on-stdin --no-dtls --servercert pin-sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx