通過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 升級到 2016,2010用戶無法通過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許可權。 一般,普通使用者在執行特殊命令是,只需要在特殊