iT邦幫忙

4

Ansible 連線主機的 port 不是 22 遇到的問題

  • 分享至 

  • xImage

終於認命開始學著用 Ansible ,在大大偷懶去問 chatCPT 的情況下,目前的小事情都還能處理,但是遇到一個怪問題,有一批主機的 ssh port 改成不是 22 (大於 20000) ,使用 Ansible 要拷貝目錄上去時,都會失敗,然後錯誤訊息會寫到連到 65530 ,CahtGPT 給了幾種設定 port 的方式,在檢查設定都顯示沒有問題,但就是無法上傳,訊息顯示,先試了 sftp 不行,然後再試了 scp 也不行。
同一個 Playbook 對 22 port 的操作都沒有問題,這會是什麼問題呀?

額外問一下,有沒有什麼資訊在教寫 Playbook 的呀?淺顯易懂,又有大量範例的?還是繼續問 ChatGPT ?

謝謝!

看更多先前的討論...收起先前的討論...
vc0528 iT邦新手 2 級 ‧ 2025-08-29 07:29:19 檢舉
先確認不是22port的ssh , 是可以連線的, 有試過登入?
canchang iT邦新手 2 級 ‧ 2025-08-29 11:54:51 檢舉
有,有直接用 ssh 跟 scp ,都是可以成功的。
Jasper iT邦新手 5 級 ‧ 2025-08-30 23:45:07 檢舉
1. 有確認過你的 inventory 裡面的 ssh port 是設定對的嗎?
2. ansible debug 可以善用 -vv 或 -vvv 會有較詳細的資訊可以做排查
canchang iT邦新手 2 級 ‧ 2025-09-11 08:43:31 檢舉
記得有回,但是不知道怎麼不見了。
沒講清楚,其實是做三件事,移除舊軟體,上傳新軟體,安裝新軟體,然後移除舊軟體部份是成功的,是上傳一直失敗。
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
Kailis
iT邦研究生 1 級 ‧ 2025-08-27 15:02:36

幫你問了DeepSeek R1 Distill Llama 70B 模型,
請參考


遇到这个问题,首先要檢查的是Ansible的設定是否正確,特别是SSH連接的設定。雖然你已經檢查過設定,但仍然可能有遺漏的地方。以下是一些可能的解決方法和檢查步驟:

  1. 檢查SSH連接的設定
    ansible.cfg: 確保在 ansible.cfg 中設定正確的SSH端口。例如:
    [ssh_connection]
    ssh_args = -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 20000
    如果你的SSH端口是20000,將其替換進去。
    inventory: 確保在主機的inventory檔中正確指定了SSH端口。例如:
    [servers]
    server1 ansible_host=192.168.1.100 ansible_port=20000
  2. 檢查SSH服務器的設定
    sshd_config: 確保在目標主機的 /etc/ssh/sshd_config 中允許使用指定的高端口。例如:
    Port 20000
    重新啟動SSH服務後,確保該端口正在監聽:
    sudo systemctl restart sshd
    sudo lsof -i :20000
  3. 檢查防火牆設定
    確保防火牆允許進來的SSH連接。例如,使用 ufw 或 firewalld 打開指定的端口:
    sudo ufw allow 20000
  4. 檢查SSH連接的隨機高位端口
    Ansible在使用scp或sftp時,可能會使用隨機的高位端口(如65530)進行數據傳輸。這些端口可能被防火牆阻止。
    檢查目標主機的防火牆設定,確保允許這些高位端口的數據傳輸。
  5. 測試SSH連接
    在命令行中手動測試SSH連接,確保可以成功連接到指定的高端口:
    ssh -p 20000 user@hostname
    測試scp或sftp是否能正確傳輸文件:
    scp -P 20000 local_file user@hostname:/remote_path/
  6. 檢查Ansible的版本
    確保你使用的是最新版本的Ansible,舊版本可能會有蟲或不完整的功能支持。
  7. 啟用調試模式
    運行playbook時,啟用調試模式以獲得更多錯誤信息:
    ansible-playbook -vvvv your_playbook.yml
    這樣可以幫助你更好地理解錯誤的原因。
  8. 檢查目標主機的SSH協議版本
    確保目標主機的SSH服務器支持的SSH協議版本與Ansible使用的客戶端兼容。例如,某些舊版本的SSH可能不支持新版的加密算法。
  9. 使用不同的傳輸方法
    在ansible.cfg中,你可以指定使用的傳輸方法:
    [ssh_connection]
    transport = ssh
    或者嘗試使用 smart 或 scp 模式:
    [ssh_connection]
    transport = smart
  10. 檢查目錄上傳的權限問題
    確保目標主機上的用戶有權限寫入目標目錄。
    有關學習Ansible的建議
    如果你想深入學習Ansible,以下是一些不錯的資源:

官方文件:

Ansible 官方文檔: 這是最權威的資源,雖然有些複雜,但包含了所有的功能和設定細節。
Ansible Quick Start: 很好的入門指南。
線上課程:

Red Hat Ansible Essentials: 官方的線上課程。
Ansible Fundamentals on Pluralsight.
書籍:

Ansible: Up and Running: 一本非常適合入門的書籍。
Learning Ansible: 另一本不錯的入門書籍。
社群和論壇:

Ansible Community Forum: 官方的社群論壇。
Reddit: Ansible的Reddit社群。
實驗和練習:

最好的學習方式是實驗。使用虛擬機或雲主機進行實驗,嘗試不同的playbook和任務。
如果你仍然有問題,隨時可以問我!

canchang iT邦新手 2 級 ‧ 2025-09-08 12:35:40 檢舉

不好意思,忘了回應。
沒講清楚,這個 playbook 裡總共做三件事:
移除舊防毒軟體
上傳新防毒軟體
安裝新防毒軟體
這三個動作在 22 port 的主機上都可以順利執行,但是在非 22 port 的主機上,只能執行移除防毒軟體,上傳就會失敗。
若是改用手動用 scp 上傳,同一個帳號,不會有問題。
看了一下 script ,好像上傳是用內建的功能,不知道可不可以改成 scp 的指令,晚點來問問 GPT 。
因為剛開始佈建環境,所以有一堆設定要調整,以及測試實作一些批次動作,所以就先把能做能動的先執行了,這個有問題的就先擱著了。

我要發表回答

立即登入回答