ssh 的私钥就放在~/.ssh 下,不是很容易泄露吗,什么软件都能去读,为什么说比密码安全? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jurassic2long
V2EX    问与答

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

  •  
  •   jurassic2long 2022-08-19 10:48:55 +08:00 8255 次点击
    这是一个创建于 1217 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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


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

    如果你怀疑你当前使用的机器已经被挂了木马或是恶意软件,~/.ssh 被未经你允许的软件读取了,那无论是用密码还是密钥对登录,都是不安全的行为。
    julyclyde
        43
    julyclyde  
       2022-08-22 13:41:28 +08:00
    能读.ssh 目录的程序,不是以你自己的身份,就是以更高的 root 身份运行的
    谁运行谁负责
    justaname
        44
    justaname  
       2023-01-03 17:29:01 +08:00
    @panzhc 感觉强密码就够了吧,让 ssh-agent 记住密码的话也只需要输入一次,普通程序能读取 ssh-agent 的内部信息的话整个安全体系就已经形同虚设了吧
    liuidetmks
        45
    liuidetmks  
       2024-03-11 19:15:28 +08:00
    @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
        46
    dilidilid  
       250 天前
    @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
        47
    dilidilid  
       250 天前
    @liuidetmks 看起来你的这个程序只是 print 出来了 identity 里面的 comment ,不是 key 本身呀
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3191 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 11:49 PVG 19:49 LAX 03:49 JFK 06:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86