jurassic2long
V2EX  ›  问与答

ssh 的私钥就放在~/.ssh 下,不是很容易泄露吗,什么软件都能去读,为什么说比密码安全?

  •  
  •   jurassic2long · Aug 19, 2022 · 9343 views
    This topic created in 1541 days ago, the information mentioned may be changed or developed.

    如题,题主对网络攻防完全外行,只是从日常使用中感觉是这样。

    47 replies  •  2025-04-12 02:09:40 +08:00
    gtgc2005
    gtgc2005
    Aug 19, 2022
    1
    日常不建议用 root 用户操作,非 root 权限无法操作 /root 目录
    haozi1986
    haozi1986
    Aug 19, 2022
    2
    难道你没设置文件权限?……
    jurassic2long
    jurassic2long
    OP
    Aug 19, 2022
    3
    @gtgc2005
    @haozi1986
    不用 root ,有权限,但是用户自身的账号权限也能读取呀;
    还有 Windows 系统的情况,很多时候好像自带管理员权限,user 文件夹随便访问。
    leavic
    leavic
    Aug 19, 2022
    4
    安全的是可以防止弱密码,如果 key 随便丢,那和用 123456 做密码一样。
    jurassic2long
    jurassic2long
    OP
    Aug 19, 2022
    5
    @leavic 不是随便丢,就是再它原来的位置,只是觉得什么软件都能去读它。
    auin
    auin
    Aug 19, 2022
    6
    是这样子的,自从给.ssh 文件夹上了监控,发现不少软件会读这个文件夹。
    zhzy0077
    zhzy0077
    Aug 19, 2022
    7
    1. 私钥是可以上密码的
    2. 密码验证会被中间人,密钥不会
    3. 2048 bit 的 RSA 密钥*大概*相当于 log64(2^2048) = 341 长度的随机密码
    jurassic2long
    jurassic2long
    OP
    Aug 19, 2022
    8
    如果我是攻击者,我会写个有点用又看起来人畜无害的小程序,然后悄悄去扫~/.ssh

    再进一步说,xshell 、putty 等类似的软件是不是掌握了巨量的密码、密钥,想想就不太安全
    yfugibr
    yfugibr
    Aug 19, 2022 via Android❤️4
    9
    ssh 密钥是可以设置密码也推荐设置密码的。
    我理解 ssh 密钥是为了增强安全性(防止直接爆破服务器),而不是简化操作(无密码登录,如果可以保证本地设备安全的话,确实可以这么干)
    jurassic2long
    jurassic2long
    OP
    Aug 19, 2022
    10
    @zhzy0077 确实,我一直用无密码的密钥,都忘记可以上密码这茬了,感觉这个习惯不好。。
    jurassic2long
    jurassic2long
    OP
    Aug 19, 2022
    11
    @yfugibr 嗯嗯 这么理解感觉就通顺了
    singerll
    singerll
    Aug 19, 2022 via Android
    12
    说他安全主要是说的服务端,没说客户端比较安全。
    gtgc2005
    gtgc2005
    Aug 19, 2022
    13
    @zhzy0077 学习了
    Felldeadbird
    Felldeadbird
    Aug 19, 2022
    14
    我认为这么理解。
    1. 你有私钥,你登录目标服务器,只有你可以登录。

    2.你登录后,在服务器乱装软件,软件权限还给得很高。软件把服务器 IP 和~/.ssh 的密钥搞下来了。

    3. 你私钥泄露了。任何人都可以访问了。
    momocraft
    momocraft
    Aug 19, 2022
    15
    不要执行你不相信的软件
    AoEiuV020CN
    AoEiuV020CN
    Aug 19, 2022
    16
    正常.ssh 放的不是当前 linux 的登录私钥,
    linux 桌面用户少,.ssh 存放了服务器私钥的 linux 桌面用户更少,在这基础上还乱运行闭源未知软件的用户就更更少了,
    楼主说的确实有可能,但考虑用户量,就算真有人开发针对这些人病毒木马,感觉也未必能收回成本,
    wtsamuel
    wtsamuel
    Aug 19, 2022
    17
    你不信任的软件就应该丢进虚拟机里
    estk
    estk
    Aug 19, 2022
    18
    任意路径不都是强制 chmod 600 才允许使用吗?
    luxor
    luxor
    Aug 19, 2022
    19
    authorized_keys 是公钥
    nightwitch
    nightwitch
    Aug 19, 2022
    20
    服务端~/.ssh 不会放私钥,只会放公钥。

    如果你说的是自己桌面端~/.ssh 的私钥,ssh 提供加密的功能。
    runo
    runo
    Aug 19, 2022
    21
    authorized_keys 放的是可以用来登录的私钥对应的公钥,泄漏其实也无妨,况且目录和文件都是 0600 权限的
    tool2d
    tool2d
    Aug 19, 2022
    22
    “不用 root ,有权限,但是用户自身的账号权限也能读取呀;”

    我看了一眼服务器,并不是。
    .ssh 目录默认只能 root 用户自己读取,除非你改过授权了。
    heyjei
    heyjei
    Aug 19, 2022❤️1
    23
    @jurassic2long 是的,很早之前百度有一个软件中心,专门提供各种软件的下载,就和 360 软件库一样。然后他里面的 Putty 就被加了木马,所有使用过这个版本 putty 的用户,登陆信息全被上传到一个服务器。

    事发后,rj.baidu.com 这个域名直接被取消解析。百度软件中心这个产品一夜之间被砍。
    4BVL25L90W260T9U
    4BVL25L90W260T9U
    Aug 19, 2022
    24
    前两天不是刚有个讨论 chrome 在本地明文存储密码的?本地明文才是常态啊……
    xzysaber
    xzysaber
    Aug 19, 2022
    25
    你确定那是私钥吗?
    felixcode
    felixcode
    PRO
    Aug 19, 2022 via Android
    26
    你不知道 chmod 600 设置权限吗?
    dcsuibian
    dcsuibian
    Aug 19, 2022
    27
    mangoDB
    mangoDB
    Aug 19, 2022
    28
    目录权限
    forbreak
    forbreak
    Aug 19, 2022
    29
    你.ssh 目录都被人 copy 走了。那你还谈什么安全? 安全是防中间过程。
    yohn89
    yohn89
    Aug 19, 2022
    30
    你把车钥匙锁在你家保险箱里面,你的保险箱被小偷进来偷走了,然后你说车钥匙不安全?
    duanxianze
    duanxianze
    Aug 19, 2022
    31
    你对安全的理解有错误,能接触到物理实机的情况下大多数安全措施都没意义了,防的是网络攻击
    nu11ptr
    nu11ptr
    Aug 19, 2022
    32
    ~/.ssh 下的私钥如果不是 600 权限,会报错
    确实相同用户权限就能访问,最好在创建密钥时额外设置密码
    ch2
    ch2
    Aug 19, 2022
    33
    有了你的私钥,知道你这个私钥能在哪用吗
    bleaker
    bleaker
    Aug 19, 2022
    34
    黑客知道了我的私钥,可以 ssh 到我电脑上帮我修 bug 吗。。
    halberd
    halberd
    Aug 19, 2022
    35
    私钥加 passphrase
    如果嫌每次都要输 passphrase 麻烦,可以用 ssh-agent 记住密码,这样唯一风险在于被读 ssh-agent 的内存,但那就需要 root 权限了。
    GHvyuR7N
    GHvyuR7N
    Aug 19, 2022 via iPhone
    36
    密钥登录普通账户,想 sudo 提权老老实实输入密码...
    wonderfulcxm
    wonderfulcxm
    Aug 19, 2022 via iPhone
    37
    安全是相对的,跟别的普通文件区别不过是权限限定 600 ,只能保证其他用户无法读写,无法保证以你身份执行应用的扫描。
    不过 mac 好像有个功能,应用要读写某个目录,会弹出一个提示问是否允许。
    yp965FjL630VP3s2
    yp965FjL630VP3s2
    Aug 19, 2022
    38
    不安全,user 用户安装的软件,绝大多数的所有者都是 user 本身,这意味着软件想要访问家目录下的.ssh 文件夹不会有任何权限问题。所以私钥一定要设置密码,并且不要运行来历不明的软件。
    pingdog
    pingdog
    Aug 19, 2022 via Android
    39
    DAC 限制不到,要上 MAC 级别的功能
    可以买商业解决方案
    也可以用 NSA 开发及众多组织和个人参与贡献在 kernel 的 selinux 🌚

    我为什么要强调 NSA ?因为遇到很多一听到这个缩写都是闻风丧胆,需求立马砍掉或购买商业解决方案


    selinux 建议吃透概念并自行配置,CTRL C V 大概率会导致服务器失联
    panzhc
    panzhc
    Aug 20, 2022
    40
    很多人都没有看懂 OP 的问题,其实我也一直有一样的担心,目前想到的办法也就是:
    1. 给密钥加密码;
    2. 服务器 2FA ;
    3. 目前主要用 Linux 办公,常用软件都是开源的,没有 XX ,涉及到各种 IM 软件都在 Mac 上;
    4. 做个虚拟机或者其他机器当作跳板,key 放在跳板上。
    panzhc
    panzhc
    Aug 20, 2022
    41
    另外,有段时间还给服务器设置了登录通知,也可以记录到数据库,但是通知太多就没怎么看了。
    endle
    endle
    Aug 21, 2022❤️2
    42
    在讨论安全的时候,是要有一些假设的。把私钥存储在 ~/.ssh 下,要假设本机是安全的。

    如果你怀疑你当前使用的机器已经被挂了木马或是恶意软件,~/.ssh 被未经你允许的软件读取了,那无论是用密码还是密钥对登录,都是不安全的行为。
    julyclyde
    julyclyde
    Aug 22, 2022
    43
    能读.ssh 目录的程序,不是以你自己的身份,就是以更高的 root 身份运行的
    谁运行谁负责
    justaname
    justaname
    Jan 3, 2023
    44
    @panzhc 感觉强密码就够了吧,让 ssh-agent 记住密码的话也只需要输入一次,普通程序能读取 ssh-agent 的内部信息的话整个安全体系就已经形同虚设了吧
    liuidetmks
    liuidetmks
    Mar 11, 2024
    45
    @justaname 普通程序就是能读取 ssh-agent 啊, 不然 git 是怎么读取的,用 gpt 问了下,直接就能遍历私钥,只是比读取文件稍微多了一些代码

    // 遍历私钥
    LIBSSH2_AGENT_PUBLICKEY* identity;
    while ((identity = libssh2_agent_get_identity(identities, 0)) != NULL) {
    // 在这里可以使用 identity 中的信息,如 identity->comment 和 identity->blob
    // 例如,你可以打印私钥的注释信息
    printf("Private Key Comment: %s\n", identity->comment);
    }
    dilidilid
    dilidilid
    Apr 12, 2025
    46
    @liuidetmks
    这是 GPT 的回答
    Yes — common programs without sudo can read SSH private keys from ssh-agent, but not the private keys themselves — instead, they get access to the ability to sign on your behalf via the agent.
    ❌ What they cannot do:
    • Extract or dump the actual private key.
    • Access the agent from another user (unless you explicitly share the agent socket via file permissions — not recommended).

    ssh-agent 是不可能直接暴露私钥给普通程序的,程序只能请求 agent 帮它签名从而完成鉴权过程,不然这个机制不成了脱裤子放屁了吗
    dilidilid
    dilidilid
    Apr 12, 2025
    47
    @liuidetmks 看起来你的这个程序只是 print 出来了 identity 里面的 comment ,不是 key 本身呀
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1763 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 90ms · UTC 13:53 · PVG 21:53 · LAX 05:53 · JFK 08:53
    ♥ Do have faith in what you're doing.