GoodRui
V2EX  ›  macOS

求助, Mac 不知道从哪天开始,无 ssh 连接 hostname 中带有中文字符的主机了

  •  
  •   GoodRui · Mar 25, 2024 · 2909 views
    This topic created in 784 days ago, the information mentioned may be changed or developed.

    自带 终端itermwarp、包括vs code,使用 ssh config 配置文件远程服务器时,如果 ssh config 配置文件中的主机名含有中文字符,就提示 hostname contains invalid characters 无法连接。有没有大佬遇到过同样的问题解决过的?谢谢~

    ssh config 配置文件中的示例:

    Host 测试.63
    	User root
    	HostName 172.16.111.63
    	Port 22
    

    ssh 时的输出

    ❯ ssh -v -T -D 58228 -o ConnectTimeout=15 测试
    hostname contains invalid characters
    
    19 replies    2024-03-29 17:37:02 +08:00
    GoodRui
        1
    GoodRui  
    OP
       Mar 25, 2024
    上面使用 ssh 连接的时候,是使用的 `测试.63` 主机名连接的
    drymonfidelia
        2
    drymonfidelia  
       Mar 25, 2024
    第一次知道 hostname 还能包含中文的
    daveh
        3
    daveh  
       Mar 25, 2024 via iPhone
    ssh 命令行中使用 测试.63 而不是 测试。
    如果还有问题,检查文件内容是否 UTF-8 ,locale 是否支持 UTF-8 。
    sinxccc
        4
    sinxccc  
       Mar 25, 2024
    何必自己给自己加难度呢
    bao3
        5
    bao3  
       Mar 25, 2024   ❤️ 1
    我也是第一次知道还能用中文……我用了 20 多年的 ssh ,我哭。
    GoodRui
        6
    GoodRui  
    OP
       Mar 25, 2024 via Android
    @sinxccc 大哥我光这个 config 配置就两千多行,几百台服务器,一直用的好好的,本子都用了 3 年了,出了问题不解决难道一把梭抹掉重来吗?
    GoodRui
        7
    GoodRui  
    OP
       Mar 25, 2024 via Android
    @daveh 感谢老哥回复,1 楼有说明,这个是在不断重命名时截取的输出,上下的配置不是同一时间所以有出入,但是是示例,实际操作时肯定都是正确的。2 千多行的配置,几百台服务器,用了 3 年多了,突然出现异常肯定不是个别服务器配置错误导致的。下午试了十几台了,只要是 hostname 中有中文字符的全不行了😖
    GoodRui
        8
    GoodRui  
    OP
       Mar 25, 2024 via Android
    @bao3 可能主机数量少的话也无所谓,但是我平时运维的主机数量比较多,两千行的配置,可能得 200 多台服务器。光 10.0.0.10 就十几台...hostname 都是详细的信息。
    GoodRui
        9
    GoodRui  
    OP
       Mar 25, 2024 via Android
    @drymonfidelia hostname 随便起啊,对于 ssh config 来说就是个 tag ,不影响远端服务器本身信息。
    drymonfidelia
        10
    drymonfidelia  
       Mar 25, 2024
    @GoodRui 我上个月才知道终端里支持输入中文,记得以前输入中文都乱码,我 hostname 都是客户名字的拼音加用途英文
    GoodRui
        11
    GoodRui  
    OP
       Mar 25, 2024 via Android
    @drymonfidelia 其实我倒是也很少直接在终端里输入中文 hostname 连,只是管理起来方便,用自动补全、历史命令之类的,很快就能补出目标主机,很是方便。还有就是使用 vscode 的时候输中文连接比较方便。还有就是 Windows 下也一样很方便。主要是管理的服务器太多了...
    Yadomin
        12
    Yadomin  
       Mar 26, 2024   ❤️ 6


    可能不怪 mac ,你可以自己编译一个旧的用
    sinxccc
        13
    sinxccc  
       Mar 26, 2024
    @GoodRui 抱歉,我不知道你是已有的旧配置,以为是你在写新的。
    mritd
        14
    mritd  
       Mar 26, 2024 via iPhone
    学到了😂
    GoodRui
        15
    GoodRui  
    OP
       Mar 26, 2024
    @Yadomin 感谢老哥提供思路,尝试了下确实是这个问题,以下是 openssh 的更新记录,高亮部分提到的应该是影响 hostname 中含中文的情况:



    使用 homebrew 安装了 9.5p1 版本的 openssh ,恢复正常。



    感觉这个改动影响挺大的,包括 Reddit 上也有老外反馈,使用 `a human readable Host like "Web Host A - Client Name"` 这种的也不行了。

    哎不知道以后咋搞。
    march1993
        16
    march1993  
       Mar 27, 2024
    提 issue 吧,毕竟域名里可以有中文,hostname 就不能有中文了?
    GoodRui
        17
    GoodRui  
    OP
       Mar 27, 2024
    @march1993 貌似提不了 issue 呢,官方的公告说了这是为了修复漏洞,不光是中文字符,连一些字符比如空格都给禁用了,估计不好办。
    march1993
        18
    march1993  
       Mar 29, 2024
    @GoodRui 应该不是 openssh 问题,我感觉是 mac 问题。我单独跑了这段代码,测试没问题的
    ```c
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #include <stdint.h>

    typedef unsigned char u_char;

    static int
    valid_hostname(const char *s)
    {
    size_t i;

    if (*s == '-')
    return 0;
    for (i = 0; s[i] != 0; i++) {
    if (strchr("'`\"$\\;&<>|(){}", s[i]) != NULL ||
    isspace((u_char)s[i]) || iscntrl((u_char)s[i]))
    return 0;
    }
    return 1;
    }

    int main(int argc, char * argv[]) {
    char* testCJK = "测试.63";
    //char* testCJK = "Abc 你好こんにちは안녕하세요";
    printf("valid_hostname(testCJK): %s\n", valid_hostname(testCJK) ? "true" : "false");
    }
    ```
    GoodRui
        19
    GoodRui  
    OP
       Mar 29, 2024
    @march1993 不过这个我确实换了 9.5p1 版本的 openssh 就可以了,而且 9.6p1 版本的 release 里面确实有提到这个。Reddit 上也有关于这个的讨论。
    更深的原理就不懂了,能用就行了...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5660 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 100ms · UTC 03:08 · PVG 11:08 · LAX 20:08 · JFK 23:08
    ♥ Do have faith in what you're doing.