1. 程式人生 > >通過ssh隧道訪問mysql,包括免密碼操作

通過ssh隧道訪問mysql,包括免密碼操作

我的機器可以連線伺服器A,A可以訪問伺服器B上的MySQL,但是我的機器不能訪問B,所以我需要建立一個我本地機器到伺服器A的ssh隧道來訪問伺服器B上的mysql。

理一下思路:

1.我要ssh的伺服器是111.112.113.114,埠是5122,賬戶名是wz。

2.然後我ssh到111.112.113.114之後要訪問的mysql伺服器地址是:192.168.3.51,埠號是3306 。

3.我打算把這個ssh隧道繫結到我本地的3307埠。

好了,搞明白之後我們開始寫命令:

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">andy<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@AndyMacBookPro</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:/usr/local/webdata/andy/shop/jd/job</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>ssh -fN -<span class="hljs-constant" style="box-sizing: border-box;">L3307</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3.51</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3306</span> -p5122 wz<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@111</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">112.113</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">114</span>
wz<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@111</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">112.113</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">114</span><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'s password:
[email protected]
:/usr/local/webdata/andy/shop/jd/job$ lsof -i:3307 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ssh 1114 andy 5u IPv6 0xaed4b8ceeaf7e51 0t0 TCP localhost:opsession-prxy (LISTEN) ssh 1114 andy 6u IPv4 0xaed4b8cfd6dcef1 0t0 TCP localhost:opsession-prxy (LISTEN)
[email protected]
:/usr/local/webdata/andy/shop/jd/job$</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li></ul>

可以看到最後已經建立了兩個隧道,命令成功!

其中ssh的語法是這樣的:

ssh -fN -L(要繫結到的本地埠):(伺服器B的Host):(伺服器B上要訪問的埠號) -p(伺服器A的埠,預設為22) (伺服器A的賬戶):(伺服器A的Host)

之後我們就可以寫php程式碼來通過ssh隧道來訪問那臺無法直接連線的mysql伺服器了,我這裡使用的是medoo這個好東西:

<code class="hljs php has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">ini_set(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'memory_limit'</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'256M'</span>);

error_reporting(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>);
set_time_limit(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>);

<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$medoo</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'/usr/local/webdata/github/Medoo/medoo.php'</span>;
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">require</span> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$medoo</span>;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$database</span> = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> medoo([
    <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'database_type'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'mysql'</span>,
    <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'database_name'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'monitor'</span>,
    <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'server'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'127.0.0.1'</span>,
    <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'username'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'myname'</span>,
    <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'password'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'mypassword'</span>,
    <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'port'</span> => <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'3307'</span>,
]);

<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$database</span>->query(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"set names utf8;"</span>);

<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$sql</span> = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'show tables'</span>;
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span> = <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$database</span>->query(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$sql</span>)->fetchall();
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">echo</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'<pre>'</span>;var_dump(<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$data</span>);<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">exit</span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li></ul>

經驗證可以訪問成功。另,以上的server如果寫成localhost是會報錯的,要設定為127.0.0.1才可以。

============================================================================================================

sshpass: 用於非互動的ssh 密碼驗證

ssh登陸不能在命令列中指定密碼,也不能以shell中隨處可見的,sshpass 的出現,解決了這一問題。它允許你用 -p 引數指定明文密碼,然後直接登入遠端伺服器。 它支援密碼從命令列,檔案,環境變數中讀取 $> sshpass -h Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters    -f filename Take password to use from file    -d number Use number as file descriptor for getting password    -p password Provide password as argument (security unwise)    -e Password is passed as env-var "SSHPASS"    With no parameters - password will be taken from stdin    -h Show help (this screen)    -V Print version information At most one of -f, -d, -p or -e should be used sshpass [-f|-d|-p|-e] [-hV] command parameters 中的 command parameters 和使用互動式密碼驗證的使用方法相同 #從命令列方式傳遞密碼     $> sshpass -p user_password ssh [email protected]     $> sshpass -p user_password scp -P22 192.168.1.2:/home/test/t .  #從檔案讀取密碼     $> echo "user_password" > user.passwd     $> sshpass -f user.passwd ssh [email protected] #從環境變數獲取密碼     $> export SSHPASS="user_password"     $> sshpass -e ssh [email protected]  原始碼位置:http://sourceforge.net/projects/sshpass/ --------------end--------------
From: GS
-------------------------------

相關推薦

通過ssh隧道訪問mysql包括密碼操作

我的機器可以連線伺服器A,A可以訪問伺服器B上的MySQL,但是我的機器不能訪問B,所以我需要建立一個我本地機器到伺服器A的ssh隧道來訪問伺服器B上的mysql。 理一下思路: 1.我要ssh的伺服器是111.112.113.114,埠是5122,賬戶名是w

通過ssh隧道訪問mysql

許多時候當要使用Mysql時,會遇到如下情況: 1. 資訊比較重要,希望通訊被加密。 2. 一些埠,比如3306埠,被路由器禁用。 對第一個問題的一個比較直接的解決辦法就是更改mysql的程式碼,或者是使用一些證書,不過這種辦法顯然不是很簡單。 這裡要介紹另外一種方法,就是利用SSH通

通過WEB伺服器訪問MYSQL並且資料同步到android SQLite資料庫

2、連線資料庫。 3、訪問資料庫      過程2、3 具體步驟: 1、在Myeclipse下新建一個web專案,為了好統一管理在WEB-INF下建一個web.xml用來載入伺服器啟動時的配置資訊。這個檔案是由大量的<servlet></servle

怎麼通過web伺服器訪問MYSQL資料庫使其資料同步到android SQLite資料庫?

      通過web伺服器訪問MYSQL資料庫有以下幾個過程: 2、連線資料庫。 3、訪問資料庫      過程2、3 具體步驟: 1、在Myeclipse下新建一個web專案,為了好統一管理在WEB-INF下建一個web.xml用來載入伺服器啟動時的配置資訊。這

通過web伺服器訪問MySQL資料庫並把資料庫中的某張表解析成xml格式輸出到瀏覽器

可以先想象一下,客戶端用到遠端資料庫中的資訊比如Menu表中的資訊,怎麼獲取呢?可以通過web伺服器獲取。這就需要寫一個繼承 HttpServlet的抽象類,並且重寫doGet()和doPost()方法。    下面就是此類的具體實現: public class Updat

通過web伺服器訪問MYSQL資料庫使其資料同步到android SQLite資料庫

      通過web伺服器訪問MYSQL資料庫有以下幾個過程: 2、連線資料庫。 3、訪問資料庫      過程2、3 具體步驟: 1、在Myeclipse下新建一個web專案,為了好統一管理在WEB-INF下建一個web.xml用來載入伺服器啟動時的配

配置SSH隧道訪問Ubuntu服務器上的MongoDB

add 重啟 裏的 登錄 環境 localhost bsp ssh服務器 tcp/ip 為了數據安全,在MongoDB的配置文件裏,一般會把默認的27017端口port改為自定義的端口號,然後把允許訪問的IP設為127.0.0.1(即主機本身)。但是這樣就會在開發的過程查看

Python通過SSH隧道鏈接Kafka

available nobrokers kafka Python通過SSH隧道鏈接Kafka最近有一個需求需要連接Kafka,但是它只允許內網鏈接,但是有些服務跑在服務器上總沒有在我本機調試起來爽,畢竟很多開發工具還是在客戶端機器上用的熟練。於是我想到了通過SSH連接Kafka,至於怎麽連接可以通

通過設定ie的通過跨域訪問資料來源訪問本地服務

1、首先設定通過域訪問資料來源 設定通過域訪問資料來源 2、javascript指令碼ajax使用本地服務登入(評價,人證的類似)介面 <html> <head> <script type="text/javascript"> f

快速瞭解通過SSH認證訪問伺服器

瞭解SSH SSH 以非對稱加密實現身份驗證。較常用的非對稱加密有 RSA。 兩種加密過程:   1、通過使用者名稱密碼訪問伺服器,即使傳輸的資料是加密的也可能會被劫持到不信任的伺服器,洩露使用者名稱和密碼。   2、通過將公鑰(用來加密和認證客戶端)放到信任的伺服器上來和伺服器傳輸密文。

乾貨教程北京賽車和騰訊分分彩原始碼搭建通過資料庫改注單包括賬變明細的改動

菠菜原始碼出售,平臺搭建開發 haozbbs.com,聯絡QQ1446595067 一、表說明 彩種資訊表 開啟資料庫 資料庫整體表 修改金額 注單表1 注單表2 二、中獎改成未中獎(修

(一)git生成ssh-key實現密碼登入github

一 、 切到當前使用者的根目錄,右鍵選擇git bash,設定Git的user name和email: git config --global user.name "這裡換上你的使用者名稱" git config --global user.email "這裡換上你的郵箱"

通過linux遠端連線mysql查詢結果中文為亂碼小結

首先本地辦公環境為windows使用的是navicat連線的mysql navicat連線mysql時查詢結果正常 檢視編碼方式: mysql> show variables like ‘%character%‘; +----------------------

Exchange2010 升級到 20162010用戶無法通過2016代理訪問郵箱導致連接失敗。

-o anywhere out 功能 自動 hang 導致 chang chan 環境說明: 1臺AD和證書,4臺2010 前後端(NLB和DAG),2臺2016全角色。問題:當郵件流切換到2016後 原本在2010上的郵箱無法通過OUTLOOK連接,但是可以自動發現並配置

STM32操作訪問flash包括寫入資料到flash和從flash讀取資料

STM32中儲存區分為:隨機存取儲存器RAM和只讀儲存器ROM。 其中: RAM為常說的記憶體,比如手機的2G記憶體4G記憶體等,就是程式跑起來的時候所佔用的儲存空間,特點是掉電資料丟失。 ROM為常說的硬碟,比如手機的64G和128G等,可以簡單的理解為

Jmeter配置通過SSH連線的mysql資料庫

jmeter連線配置mysql資料庫時,如果資料庫伺服器沒有通過ssh連線,則只需要新增配置相應的jdbc引數就可以了。如果資料庫伺服器是通過SSH連線的,則需要通過中間遠端連線工具來登入,此處使用的遠端連線工具為Putty,具體的配置請參考如下: 1、首先,下載並開啟Putty,在Putty Config

解決通過ip能夠訪問網路通過域名無法訪問的問題

1)編輯/etc/resolv.conf,新增名稱伺服器,內容是閘道器地址。 nameserver 192.168.231.2 2)儲存退出 3)重啟服務 $>su root $>ser

JDBC通過SSH Tunnel連線MySQL資料庫

有時候我們無法直接訪問某臺數據庫,因為沒有授權或者ip限制,但是可以通過登陸其他機器來訪問,如果這臺伺服器安裝有SSH,就可以方便的在本地通過該服務的埠對映來代理訪問資料庫。Navicat就有這個方便的功能,如下圖所示: 由此聯想到,在Java程式碼中能否實現類似的功能呢? 紅薯已經給出了

Ubuntu 使用 C語言呼叫 Shell 檔案 sudo 密碼輸入為 shell 檔案加殼繞過chmod 4755 許可權問題

需求: 當我們需要指令碼檔案輸入 su 或 sudo 的時候 ,會出現密碼輸入問題 ,如何實現自動輸入密碼? ps : 需求用在 二進位制檔案 呼叫 Shell 檔案的,為shell 檔案加殼繞過chmod 4755 許可權問題 建立 C檔案 #include

CentOS下新增普通使用者到sudo組並且密碼登入

1.1 sudo          Sudo是linux系統中,非root許可權的使用者提升自己許可權來執行某些特性命令的方式,它使普通使用者在不知道超級使用者的密碼的情況下,也可以暫時的獲得root許可權。          一般,普通使用者在執行特殊命令是,只需要在特殊