最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Jenkins服務器更新密鑰后任務構建不了的排查實錄與解決方案

 更新時間:2026年05月22日 09:15:13   作者:Linux運維技術棧  
在一次生產(chǎn)環(huán)境的 SSH 密鑰輪換中,我遇到了一個極其令人困惑的問題:在 Jenkins 服務器上手動執(zhí)行 ssh -i 命令測試新密鑰到目標服務器,直接報 Permission denied,本文記錄了完整的排查過程,希望能幫助遇到類似故障的運維人員快速定位問題,需要的朋友可以參考下

前言:在一次生產(chǎn)環(huán)境的 SSH 密鑰輪換中,我遇到了一個極其令人困惑的問題:在 Jenkins 服務器上手動執(zhí)行 ssh -i 命令測試新密鑰到目標服務器,直接報 Permission denied;將同樣的命令放入 Jenkins 任務腳本中,同樣失敗。 在排除了文件權限、換行符、known_hosts 等所有常見原因后,最終發(fā)現(xiàn)是 ssh-agent 緩存的老密鑰在“作祟”,而解決方法是在 ~/.ssh/config 中為堡壘機單獨配置 IdentitiesOnly yes。

本文記錄了完整的排查過程,希望能幫助遇到類似“幽靈”故障的運維人員快速定位問題。

一、現(xiàn)象:手動測試失敗,Jenkins 任務也失敗

在 Jenkins 服務器上執(zhí)行以下命令手動測試新密鑰:

ssh -i ~/.ssh/id_ed25519_new -J user@bastion_ip:22222 target_ip "echo '連通'"

結果:Permission denied。

再將同樣的命令放入 Jenkins 任務腳本中:

scp -i ~/.ssh/id_ed25519_new -o 'ProxyJump user@bastion_ip:22222' ...

結果: Jenkins 控制臺同樣輸出 Permission denied

手動與腳本表現(xiàn)一致——說明問題不在 Jenkins 任務執(zhí)行環(huán)境,而在基礎的 SSH 連接鏈路本身。

二、排查:繞過的彎路

  1. 檢查服務器端 authorized_keys:確認新公鑰已正確添加,權限為 600,文件末尾有換行符。
  2. 重置 known_hostsssh-keygen -R bastion_ip,無效。
  3. 在腳本中增加參數(shù)-o StrictHostKeyChecking=no,依然報 Permission denied
  4. 清空 ssh-agent 緩存ssh-add -D,依然無效。

這些操作均無法解決問題,說明問題不在表面,而在 SSH 認證的深層機制。

三、真相:SSH 的密鑰優(yōu)先級順序

經(jīng)過反復驗證,發(fā)現(xiàn) SSH 在認證時的密鑰優(yōu)先級是:

  1. 最高優(yōu)先級ssh-agent 中緩存的密鑰。
  2. 中間優(yōu)先級:命令行 -i 參數(shù)指定的密鑰。
  3. 最低優(yōu)先級:~/.ssh/id_rsa 等默認密鑰。

在 Jenkins 節(jié)點上,后臺進程悄悄地啟動了 ssh-agent,并將舊的 id_rsa 密鑰加載了進去。

當我們在手動測試或 Jenkins 腳本中執(zhí)行 ssh -i ~/.ssh/id_ed25519_new ... 時,SSH 客戶端會優(yōu)先問 ssh-agent:“你有能用的鑰匙嗎?”

ssh-agent 回答:“有,我這里有 id_rsa。”

于是 SSH 嘗試用 舊密鑰 id_rsa 去連接堡壘機。此時,堡壘機上的老公鑰已被刪除,認證失敗,連接被服務端直接切斷。切斷后,SSH 根本沒機會再去嘗試你 -i 指定的新密鑰。

這就是為什么手動測試和 Jenkins 任務都失敗的根本原因。

四、終極解決方案:配置~/.ssh/config

在 Jenkins 節(jié)點上,修改 ~/.ssh/config 文件,為堡壘機添加強制隔離配置

Host bastion_ip
    IdentitiesOnly yes
    IdentityFile ~/.ssh/id_ed25519_new
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

核心參數(shù)解析:

  • bastion_ip:指構建任務時的目標服務器的ip,這里可以配制多個,用空格隔開,比如10.0.0.1 10.0.0.2 10.0.0.3。
  • IdentitiesOnly yes:強制 SSH 客戶端只使用 IdentityFile 指定的密鑰,完全忽略 ssh-agent 中緩存的所有密鑰。這是解決“-i 參數(shù)失效”的關鍵。
  • IdentityFile:指定要使用的新密鑰文件。
  • StrictHostKeyChecking no & UserKnownHostsFile /dev/null:跳過主機指紋校驗,避免 SSH 在自動化環(huán)境中卡住。

五、驗證與成果

添加配置后,再次執(zhí)行手動測試命令(不再需要 -i 參數(shù)):

ssh -J user@bastion_ip:22222 target_ip "echo '連通'"

結果: 成功輸出 連通。

直接重跑 Jenkins 任務——構建成功,密鑰輪換完成。

六、經(jīng)驗總結:下次輪換密鑰該怎么做?

  1. 不要依賴腳本里的 -i 參數(shù):在 Jenkins 這種有 ssh-agent 的環(huán)境里,單獨指定 -i 往往不可靠,因為 ssh-agent 的優(yōu)先級更高。
  2. 善用 ~/.ssh/config:為跳板機或目標服務器單獨配置 IdentitiesOnly yesIdentityFile,可以做到“一勞永逸”。
  3. 清理服務器端的舊公鑰:確保新公鑰是唯一可用的。
  4. 后續(xù)輪換:下次更新密鑰時,你只需要修改 ~/.ssh/config 里的 IdentityFile 路徑,所有 Jenkins 任務會自動切換到新密鑰,無需修改任何 Jenkins 腳本。

希望這篇博客能幫你快速定位這類 Jenkins 密鑰更新后的連接失敗問題。如果你也遇到過類似的“幽靈”報錯,不妨試試在 ~/.ssh/config 里加上 IdentitiesOnly yes,或許能節(jié)省數(shù)小時的不必要排查。

以上就是Jenkins服務器更新密鑰后任務構建不了的排查實錄與解決方案的詳細內容,更多關于Jenkins更新密鑰后任務無法構建解決的資料請關注腳本之家其它相關文章!

相關文章

  • idea修改language level版本實現(xiàn)方式

    idea修改language level版本實現(xiàn)方式

    文章介紹了在不同版本JDK之間的切換時遇到的語言級別版本問題的解決方案,通過修改系統(tǒng)環(huán)境變量、Maven配置和IDEA設置,可以實現(xiàn)不同JDK版本的切換,并確保項目順利編譯和運行
    2025-12-12
  • MyBatis環(huán)境資源配置實現(xiàn)代碼詳解

    MyBatis環(huán)境資源配置實現(xiàn)代碼詳解

    這篇文章主要介紹了MyBatis環(huán)境資源配置實現(xiàn)代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • IDEA的部署設置改為war exploded運行項目出錯問題

    IDEA的部署設置改為war exploded運行項目出錯問題

    在使用IDEA配置warexploded部署時,可能會遇到路徑問題或404錯誤,解決方法是進入Deployment設置,刪除Application content中的/marry_war_exploded,使其為空,然后重新運行項目即可,這是一種有效的解決策略,希望能幫助到遇到同樣問題的開發(fā)者
    2024-10-10
  • 帶你用Java方法輕松實現(xiàn)樹的同構

    帶你用Java方法輕松實現(xiàn)樹的同構

    給定兩棵樹T1和T2。如果T1可以通過若干次左右孩子互換就變成T2,則我們稱兩棵樹是“同構”的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點A、B、G的左右孩子互換后,就得到另外一棵樹
    2021-06-06
  • Java環(huán)境配置與編譯運行詳解

    Java環(huán)境配置與編譯運行詳解

    這篇文章主要為大家詳細介紹了Java環(huán)境配置與編譯運行的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 如何查看JVM使用的默認的垃圾收集器

    如何查看JVM使用的默認的垃圾收集器

    這篇文章主要介紹了如何查看JVM使用的默認的垃圾收集器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • RedisTemplate常用方法總結

    RedisTemplate常用方法總結

    本文主要介紹了RedisTemplate常用方法總結,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Nacos服務發(fā)現(xiàn)并發(fā)啟動scheduleUpdate定時任務的流程分析

    Nacos服務發(fā)現(xiàn)并發(fā)啟動scheduleUpdate定時任務的流程分析

    這篇文章主要介紹了Nacos服務發(fā)現(xiàn)并發(fā)啟動scheduleUpdate定時任務,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • spring的@Transactional注解用法解讀

    spring的@Transactional注解用法解讀

    這篇文章主要介紹了spring的@Transactional注解用法解讀,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • springMVC+velocity實現(xiàn)仿Datatables局部刷新分頁方法

    springMVC+velocity實現(xiàn)仿Datatables局部刷新分頁方法

    下面小編就為大家分享一篇springMVC+velocity實現(xiàn)仿Datatables局部刷新分頁方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02

最新評論

信阳市| 芮城县| 北辰区| 昭通市| 抚顺市| 嘉荫县| 伊春市| 和顺县| 阳原县| 新巴尔虎右旗| 盱眙县| 靖江市| 东辽县| 北宁市| 泾源县| 阿克陶县| 永靖县| 龙州县| 平阴县| 原平市| 开江县| 全椒县| 长白| 鹤峰县| 洞头县| 墨脱县| 仁化县| 绥棱县| 洛扎县| 开平市| 阳城县| 紫阳县| 余干县| 宾川县| 翁牛特旗| 会泽县| 诸城市| 山丹县| 灯塔市| 水城县| 土默特左旗|