設定ssh免密碼登入伺服器
注:本文假設你已經有一定的linux基本操作常識,所以一些細節不再贅述,僅作為思路參考記下。
本文方法在Linux發行版Ubuntu12.04LTS /12.10 Server下均已驗證,其他發行版原理相同。
工作中,如果常常跟linux打交道,肯定經常需要用到ssh遠端登入到伺服器,畢竟跑機房是不現實的。
ssh每次登入都要求輸入密碼進行互動,因為它認為直接加密碼不安全,但是有時候確實需要執行自動進行的定時任務,如設定的遠端登入伺服器的一些備份任務,或登入後執行某些指令碼,此時就需要避免人工再輸入密碼確認,但是ssh命令中沒有指定密碼的引數:
~$ ssh --help
usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-ccipher_spec]
[-D[bind_address:]port] [-e escape_char] [-F configfile]
[-I pkcs11][-i identity_file]
[-L [bind_address:]port:host:hostport]
[-llogin_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-R[bind_address:]port:host:hostport] [-S ctl_path]
[-Whost:port] [-w local_tun[:remote_tun]]
[[email protected]
這時該怎麼辦呢?
因為自己在做伺服器程式碼倉庫(採用ssh協議訪問的)的備份時就遇到了該問題,寫完指令碼發現無論如何都要求人工干預(要求輸入密碼),所以趕緊百度google,下面是我從網上找到的並結合自己的實踐整理的一些方法,貼出來與大家共享:
方法一:sshpass +ssh組合
sshpass是sourceforge下面的一個專案,是專門為ssh的免認證登入設計的,沒有的的話需要先安裝,具體安裝命令依各發行版linux有所不同(基於redhat系列的一般是yum;debian的一般是apt-get或aptitude),也可直接去SF官網下載,詳細引數如下:
~$ sshpass
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
-f filenameTake password to use from file
-d numberUse number as file descriptor for gettingpassword
-p passwordProvide password as argument (securityunwise)
-ePassword is passed as env-var"SSHPASS"
With no parameters- password will be taken from stdin
-hShow help (this screen)
-VPrint version information
At most one of -f, -d, -p or -e should be used
從上面可以看出,它可以直接用“-p”引數指定密碼,還可以用“-f”選項來指定存放密碼的檔案,也可以通過標準輸入讀入密碼,還可以用”-e”選項從環境變數”SSHPASS”來讀入密碼;sshpass後還要跟上標準的ssh命令語法,如現在可以這樣寫:
sshpass –p[PASSWD]ssh[USER]@host
這樣一條命令就可以了
不過SF官網說,這並不安全,因為它直接儲存了明文密碼,一般還是要通過祕鑰認證的方式,對安全要求不高的可以考慮這種方法。
方法二:expect指令碼
expect是一個免費的程式設計工具語言,用來實現自動和互動式任務進行通訊,而無需人的干預。
沒有的需要先安裝,方法同上。
將以下程式碼儲存為.exp字尾的檔案如sshlogin.exp,執行
#!/usr/bin/expect
spawn ssh -o StrictHostKeyChecking=no -l username host
expect "*password:"
send "password\r"
interact
注意,執行需要1(x)許可權,預設沒有,需執行chmod +xsshlogin.exp 或chmod 755sshlogin.exp
然後再執行指令碼(./ sshlogin.exp)。
該方法同樣以明文方式儲存了密碼,也是不夠安全的。
方法三:金鑰檔案免認證
首先用ssh-keygen生成金鑰:
ssh-keygen –t rsa(根據提示預設回車三次即可);
完成之後,應該在$HOME/.ssh/目錄下,新生成兩個檔案:id_rsa.pub和id_rsa。前者是你的公鑰,後者是你的私鑰,現在你需要將你的公鑰拷貝到伺服器上,有三種方法
(1)使用scp:
:~/.ssh$scp id_rsa.pub [email protected]:/home/user/.ssh/authorized_keys
(2)直接使用[email protected]
根據提示輸入伺服器端密碼即可,
(3)用$ssh [email protected] 'mkdir -p .ssh && cat >> .ssh/authorized_keys'< ~/.ssh/id_rsa.pub
這條命令由多個語句組成,簡介如下:
1)"$ ssh [email protected]",表示登入遠端主機;
2)單引號中的mkdir.ssh && cat >> .ssh/authorized_keys,表示登入後在遠端shell上執行的命令;
3)"$ mkdir-p .ssh"的作用是,如果使用者主目錄中的.ssh目錄不存在,就建立一個;
4)'cat >>.ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,將本地的公鑰檔案~/.ssh/id_rsa.pub,追加到遠端檔案authorized_keys的末尾。
現在直接使用
ssh [email protected]或scp命令應該就可以直接登入到伺服器了。
遠端主機將使用者的公鑰,儲存在登入後的使用者主目錄的$HOME/.ssh/authorized_keys檔案中。公鑰就是一段字串,只要把它追加在authorized_keys檔案的末尾就行了。
方法三由於不需要把密碼明文直接寫到檔案裡面,所以比較安全。但是需要注意的是,該方法需要你保護好私鑰檔案($HOME/.ssh/id_rsa)不被別人獲取到,否則別人拿到你的私鑰就可以登入認證過你的機器了,一般該目錄預設是自己可讀寫(700),如果不是,需要修改許可權。
最後通過這幾個方法再結合具體的應用更改命令就可以實現自動任務了。
本文方法基於linux到linux,對於windows到linux,可以使用putty等工具來實現同樣的功能,具體方法參見putty官方文件,或百度google。
參考:
---牽Zuo手♂不離---
相關推薦
設定ssh免密碼登入伺服器
注:本文假設你已經有一定的linux基本操作常識,所以一些細節不再贅述,僅作為思路參考記下。 本文方法在Linux發行版Ubuntu12.04LTS /12.10 Server下均已驗證,其他發行
hadoop設定ssh免密碼登入
轉載:http://blog.csdn.net/zwx19921215/article/details/19641345 對於需要遠端管理其它機器,一般使用遠端桌面或者telnet。linux一般只能是telnet。但是telnet的缺點是通訊不加密,存在不安全因素,只
ssh免密碼登入linux伺服器
1、環境:win10、win10裝有的git、linux伺服器 2、開啟git,檢視win10本機的公鑰 $ cat ~/.ssh/id_rsa.pub 3、開啟伺服器,建立.ssh目錄,進入 [[email protected] ~]# mkdir ~/.ssh/ [
SSH免密碼登入設定
兩臺Linux主機需要從其中一臺ssh至另外一臺需要手動輸入密碼,通過以下設定免密碼登入 生成祕鑰 ssh-keygen -t rsa 把祕鑰複製至需要免密登入的主機,第一次拷貝需要輸入一次密碼 ssh-copy-id -i ~/.ssh/id_rsa.pub [emai
【Linux】Linux作業系統——配置ssh免密碼登入遠端伺服器
ssh免密碼登入遠端伺服器 最簡單的操作 ssh免密碼登入的原理是把本地電腦的公鑰放在宿主機,然後使用本地電腦的私鑰去認證。 在本地電腦執行 /usr/bin/ssh-keygen -t rsa,安裝提示一直回車即可,最後會看到~/.ssh目錄下多了幾個檔案id_rsa (
入門學習Hadoop1:VMware上搭建hadoop伺服器Centos7叢集,並設定SSH免密登入。
修改主機名:hostnamectl set-hostname master 檢視自己虛擬機器閘道器IP為多少 修改ip:vim /etc/sysconfig/network-scripts/ifcfg-ens32 master:192.168.187.100
Linux多臺伺服器間SSH免密碼登入配置
SSH實現各個伺服器間的檔案相互備份,如執行scp命令,可以實現免密碼登入,從而可以使用SHELL指令碼實現一些自動化的處理。 假如A機要免密碼登入B機,具體方法如下: 1、在A機執行:"ssh-keygen -t rsa" 命令,建立公鑰資訊 #ssh-keygen
linux下設定了SSH免密碼登入但還是需要輸入密碼的解決辦法
今天在設定linux的免密碼登入後,仍然需要輸入密碼,後來找到了原因,是因為使用者沒有許可權修改.ssh目錄下的know_hosts檔案導致的。 具體情況是這樣的: 在/home/username/.ssh輸入以下命令後: #ssh-keygen -t rsa -P ''
ssh 免密碼登入(設定後仍需輸密碼的原因及解決方法)
這篇大部分是拷貝的。按操作步驟操作不行的最可能原因是:檔案許可權,不論是a機還是要訪問的b機的檔案的許可權都要改成對應的700,600;必須嚴格是這個許可權,否則會出現設定免密fail的情況。 ssh免密碼登入的原理: serverA 免密碼登入到 serverB
大資料叢集環境ssh免密碼登入設定
一、準備工作 用客戶端工具(xshell或者ssh等等)連線到linux伺服器。在root使用者下輸入命令: vi /etc/hosts,用vi編輯hosts檔案,如下: 127.0.0.1 localhost localhost.localdomain localhost4 localhos
配置ssh免密碼登入設定後還是提示需要輸入密碼
工作之餘搭建了一個叢集測試,配置了ssh免密碼登入以後 ,所有的ssh-copy-id 金鑰也都分發了 ,各項配置也沒有問題,但是使用ssh進行免密登入時,沒有報錯,但是要輸入被ssh主機的登入密碼,跟沒有配置的效果一樣。 分析了一下,問題出現在建
centos 7 系統下進行多伺服器的SSH免密碼登入配置
學習ssh配置的目的就是為學習hadoop做鋪墊。因為在進行hadoop完全分散式的大資料處理,需要用到客戶端與各個伺服器之間進行面密碼登陸並配合來完成資料處理。 基於此,我就在網上搜索了幾篇文章,嘗試著去配置。“好事多磨”,從開始配置到我真正的配置成功,還是今天上午的事
ssh 免密碼登入設定後還是提示需要輸入密碼
事情是這個樣兒的,折騰了好幾天就是搞不明白為啥設定了.ssh目錄,在authorized_keys設定了key後登入還提示需要輸入密碼。撈乾的,說怎麼解決吧,注意許可權,.ssh許可權700,authorized_keys許可權600,就KO啦!~~~~ 1
Linux伺服器之間建立信任關係,ssh免密碼登入
建立信任關係的基本操作 基本場景是想從一臺Server伺服器直接登入另一臺,或者將Server伺服器的資料不需密碼驗證直接拷貝至Client伺服器,以下我們簡稱Server伺服器為S(待發送的資料檔案在這臺伺服器上),Client服務為C,信任關係的最簡單操作方法如下
伺服器多臺機器設定.ssh免密登入。
1.實驗室的四臺linux主機,含有ssh。如果沒有ssh的話,可以使用下面命令進行安裝: yum install ssh 2.cd /home/{使用者名稱}/.ssh 檔案目錄下 3.ssh-keygen -t rsa #用rsa生成金鑰 【
linux設定ssh免密登入和ssh-copy-id命令
linux系統配置免密碼的方式: 1:ssh-keygen -t rsa ssh-keygen -t dsa 生成金鑰 2:ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] # 接下來一路回車到底
Centos 解決SSH 免密碼登入 以及Crontab製作定時SSH自動登入和關閉的指令碼
一、SSH免密碼登入 假設要登入的機器為192.168.1.100,當前登入的機器為192.168.1.101。 首先在101的機器上生成金鑰(如果已經生成可以跳過): $ ssh-keygen -t rsa一路回車即可。 然後在將生成的公鑰複製到機器100上的~/.ssh/authorized_ke
解決:centos配置ssh免密碼登入後仍要輸入密碼
轉自https://www.jb51.net/article/121180.htm 第一步:在本機中建立祕鑰 1、執行命令:ssh-keygen -t rsa 2、之後一路回車就行啦;會在~(home)目錄下中產生.ssh(隱藏)資料夾;
SSH免密碼登入配置.md
在客戶機生成私鑰和公鑰後,將公鑰放在服務機,後續客戶機通過ssh遠端登入服務機時,將不再提示輸入服務機登入密碼,即可實現免密碼登入。 這種“公鑰登入”方式,可用在伺服器間,也可以用在個人電腦(mac\windows\linux),從而實現免密碼遠端登入伺服器;
自動設定ssh免密登入指令碼
自動設定ssh免密登入指令碼 `#!/bin/bash #yum安裝expect yum -y install expect #PWD_1是登陸密碼,可以自己設定 PWD_1=123456 ips=$(cat /etc/hosts |grep -v “::” | grep -v “127