कैसे ssh पर अलग है?


175

मैं फ़ाइलों / फ़ोल्डरों को मशीनों में कैसे अलग कर सकता हूँ बशर्ते कि उपलब्ध एकमात्र कनेक्टिविटी ssh हो?


8
# 16661 पर अपेक्षाकृत समान प्रश्न है : मैं दो रेडहैट लिनक्स सर्वर कैसे अलग कर सकता हूं? । क्लिकों को सहेजने के लिए वहाँ का उत्तर है, rsync -ani --delete / root@remotehost:/लेकिन पूर्ण उत्तर अधिक विवरण देता है।
ओवेन ब्लैकर

यहाँ बहुत से उत्तर दिए गए हैं, लेकिन कौन सा दृष्टिकोण तेज़ है?
pl1nk

1
कोई भी दृश्य भिन्न उपकरण का उपयोग नहीं करता है ?
डैन डैस्कलेस्क्यू

जवाबों:


150

आप इसे बैश की प्रक्रिया प्रतिस्थापन के साथ कर सकते हैं :

 diff foo <(ssh myServer 'cat foo')

या, यदि दोनों दूरस्थ सर्वर पर हैं:

diff <(ssh myServer1 'cat foo') <(ssh myServer2 'cat foo')

12
हाँ, कुछ इस तरह, लेकिन निर्देशिका के लिए :)
एलेक्सी टिमानोव्स्की

निर्देशिकाओं के लिए आपका क्या मतलब है, बिल्ली को हमेशा ls
Kyle Brandt

27
मुझे संदेह है कि 'निर्देशिका के लिए' का अर्थ है एक पुनरावर्ती अंतर करना
इयान क्लेलैंड

9
मैंने पाया कि यदि मेरे दूरस्थ होस्ट को पासवर्ड की आवश्यकता है तो यह तकनीक मेरे लिए काम नहीं करती। पासवर्ड प्रॉम्प्ट पुनर्निर्देशन के साथ अच्छी तरह से काम नहीं करता था और सफलतापूर्वक पूरा नहीं किया जा सकता था। यदि आप ssh कुंजियों का उपयोग करते हैं तो यह समस्या नहीं होनी चाहिए।
एडम फ्रेंको

2
यह कई समस्याओं का एक बड़ा सामान्य समाधान है। 'बिल्ली फू' के बजाय आप 'खोज / फू / बार -प्रकार f का उपयोग कर सकते हैं फ़ाइल पढ़ते समय; गूंज "**** $ फ़ाइल"; बिल्ली "$ फ़ाइल"; किया 'और आपके पास अलग करने के लिए फ़ाइल नाम और फ़ाइल सामग्री की एक सूची होगी।
पॉल गियर

106

अंत में मुझे बहुत अच्छा समाधान मिला है: vimdiff

vimdiff /path/to/file scp://remotehost//path/to/file

http://linux.spiney.org/remote_diff_with_vim_and_ssh के लिए धन्यवाद http://www.vim.org/scripts/script.php?script_id=1075 भी देखें


7
निर्देशिकाओं के बारे में क्या? :)
पर्नलनिका

1
यहाँ एक उदाहरण है: vimdiff .bash_profile scp: //vaibhavc@10.217.212.97//home/vaibhavc/.bash_profile
vaichidrewar

4
2 स्लैश //के बाद remotehostमहत्वपूर्ण है। सिंगल स्लैश नहीं चलेगा
ली ची कीम

2
यदि आपके पास अपने वर्तमान होस्ट की तुलना में दूरस्थ होस्ट पर एक अलग उपयोगकर्ता नाम है, तो आप का उपयोग करेंगेvimdiff /path/to/file scp://username@remotehost//path/to/file
JaredC

आप id_rsa key files @JaredC के साथ दो रिमोट होस्ट के साथ ऐसा कैसे कर सकते हैं?
मैनाटैक्स

61

यदि आप केवल यह देखना चाहते हैं कि वास्तविक फ़ाइलों के अंतर के बजाय क्या फाइलें अलग हैं, तो आप उपयोग कर सकते हैं rsync --dry-run


10
rsync -n लघु संस्करण है।
वॉली

महान - यदि आपको किसी अन्य पोर्ट का उपयोग करने की आवश्यकता है, तो rsync -e "ssh -p 2222" <SRC> <DST>
Samoth

16

यहाँ एक और त्वरित और गंदा कमांड लाइन नुस्खा है। चुने हुए उत्तर के विपरीत, यह मेकफाइल्स के अंदर काम करता है:

ssh [login]@[host] "cat [remote file]" | diff - "[local file]"

अगर मेरा संपादन नहीं होता है: यह विधि चुने हुए उत्तर से बेहतर है क्योंकि यह मेकफाइल्स के साथ काम करता है।
क्रिस रेडफोर्ड

@Steve Dickinson - "मेकफाइल्स के अंदर काम करता है" से आपका क्या तात्पर्य है?
मार्टिन वेग्टर

1
यह भी एक अच्छा समाधान है यदि आप खुद की तरह विम एलर्जी से पीड़ित हैं। :) मैंने एक बैश स्क्रिप्ट बनाई जो दो अलग-अलग मेजबानों पर एक ही फाइल की तुलना करती है, मशीनों के बीच सेवाओं को माइग्रेट करने और कॉन्फ़िगरेशन फ़ाइलों की तुलना करते समय उपयोगी होती है। Gist.github.com/jhqv/dbd59f5838ae8c83f736bfe951bd80ff
Janek

10

फ़ाइलों को एक आम मशीन में लाने के लिए और उन्हें वहां अलग करने के लिए scp का उपयोग करें?

या, यदि आप जानना चाहते हैं कि फाइलें अलग - अलग हैं या नहीं, तो उन्हें प्रत्येक मशीन पर md5sum के साथ हैश करें।

आप SSHFS जैसी किसी चीज़ पर भी गौर कर सकते हैं , लेकिन मुझे नहीं पता है कि अलग-अलग तरह का एल्गोरिथम कितना अच्छा प्रदर्शन करता है।


2
यह देखने का एक आसान तरीका है कि फाइलें अलग हैं या नहीं rsync --dry-run
जेराल्ड कॉम्स

मैं SSHFS के बारे में भूल गया था। इसने मेरे लिए बहुत अच्छा काम किया ...
arod

7

एक तरह से, अगर यह आपके सिस्टम पर संभव है तो बस sshfs के साथ दूरस्थ फाइल सिस्टम को माउंट करना होगा ।


डिफरेंस आमतौर पर वन-शॉट एक्शन होता है, जैसे कॉन्फिग डिफरेंस को चेक करना। हर बार फाइलसिस्टम माउंट करना संभव है, लेकिन आश्वस्त नहीं। मैं बेहतर टार और scp हूँ।
एलेक्सी टिमानोव्स्की

3

आप rsyncसूखे रन मोड में उपयोग कर सकते हैं , जैसा कि दूसरे उत्तर में संक्षेप में सुझाया गया है । यह किसी भी फाइल को सूचीबद्ध करता है जो अलग हैं।

उसके लिए, rvncविकल्पों ( r= पुनरावर्ती, v= क्रिया, n= शुष्क-रन, c= चेकसम) का उपयोग करें। साथ rsyncपुल मोड (में rsync [OPTION...] [USER@]HOST:SRC... [DEST]), एक उदाहरण है:

rsync -rvnc root@182.18.158.207:/var/www/html/dev/ .

याद रखें , यह इस बारे में कोई जानकारी नहीं देता है कि स्थानीय या दूरस्थ फ़ाइल नया है या नहीं। बस अगर वे अलग हैं।


2
  • अपनी स्थानीय मशीन पर, उस निर्देशिका की पुनरावर्ती प्रतिलिपि बनाएँ जिसे आप अलग करना चाहते हैं। उदाहरण के लिए:

    cp -R dir replica
    
  • स्थानीय निर्देशिका पर दूरस्थ निर्देशिका को दोहराने के लिए rsync का उपयोग करें:

     rsync remote:/path/to/dir replica
    
  • स्थानीय निर्देशिका और दूरस्थ एक की स्थानीय प्रतिकृति के बीच अंतर जानने के लिए उपयोग करें:

    diff dir replica
    

2

यदि आपके पास sshfs है और निर्देशिकाओं को अलग करने की आवश्यकता है:

mkdir remote_path
sshfs user@host:/path/ remote_path
diff -r path remote_path

1

यहाँ देखें कि मैंने यह कैसे किया।

मैंने दूरस्थ सर्वर में SFTP का उपयोग किया और संकेत दिए जाने पर अपना उपयोगकर्ता नाम / pwd दर्ज किया। फिर मैंने उस dg का उपयोग किया जो .gvfs dir को मेरे होम डाइरेक्टरी में अलग कमांड में बनाया गया था।

diff -r --brief / home / user dir / .gvfs / SFTP \ on \ freenas.local / dir / dir1 / पथ के लिए स्थानीय dir / dir2


1

यह एक स्क्रिप्ट है जो स्थानीय फ़ोल्डर और दूरस्थ फ़ोल्डर को अलग करने में मदद कर सकती है।

 #!/bin/bash

 LOCALFOLDER=/var/www/tee
 REMOTEFOLDER=$(ssh root@111.111.111.1 'ls -lA /hfs/tee'| grep -E '^total' | cut -d " " -f 2 > remotessh.txt)
 COMMAND=$(ls -lA $LOCALFOLDER | grep -E '^total' | cut -d " " -f 2 > localssh.txt)
 REM=$(cat remotessh.txt)
 LOCAL=$(cat localssh.txt)

 echo $LOCAL
 echo $REM

 if [ $REM -eq $LOCAL ]
 then
      echo Directories are the same
 else
      echo Directories are differnt
 fi

 #diff localssh.txt remotessh.txt | grep -E '^total' | cut -d " " -f 2


1

Ssh भर में घुड़सवार sshfs का प्रयोग करें । यह सब तेजी से नहीं होगा, लेकिन आप अपने पूर्ण उपकरणों का उपयोग कर सकते हैं जो स्थानीय फाइल सिस्टम पर सब कुछ होने की उम्मीद करते हैं। एक विकल्प "Ssh -w" (या अन्य संचार जहां ssh सीमा नहीं है) के साथ बनाई गई सुरंग के ऊपर NFS है।


1

आप भी अपने ~ / .bashrc में संभवतः बैश फ़ंक्शन बनाकर दृष्टिकोण को सामान्य बनाने का प्रयास कर सकते हैं।

myrdiff() { ssh root@"$1" cat "$2" | diff -s - "$2" ; }

फिर इसे एक निर्माण के साथ लागू करना जैसे:

myrdiff vm20-x86-64 /etc/gdm/Init/Default

-S के साथ अलग होने से, यह भी रिपोर्ट करेगा कि क्या फाइलें समान हैं।

चीयर्स! जिम

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.