Ssh ට වඩා වෙනස් වන්නේ කෙසේද?


180

ලබා ගත හැකි එකම සම්බන්ධතාවය ssh බව සපයා ඇති යන්ත්‍ර හරහා ගොනු / ෆෝල්ඩර වෙනස් කරන්නේ කෙසේද?


8
# 16661 හි සාපේක්ෂව සමාන ප්‍රශ්නයක් තිබේ : මට RedHat Linux සේවාදායක දෙකක් වෙනස් කළ හැක්කේ කෙසේද? . ක්ලික් කිරීම් සුරැකීමට එහි ඇති පිළිතුර, rsync -ani --delete / root@remotehost:/නමුත් සම්පූර්ණ පිළිතුර වඩාත් විස්තර සපයයි.
ඕවන් බ්ලැකර්

මෙහි බොහෝ පිළිතුරු ඇත, නමුත් වේගවත් වන්නේ කුමන ප්‍රවේශයද?
pl1nk

Answers:


155

බාෂ්ගේ ක්‍රියාවලි ආදේශනය සමඟ ඔබට එය කළ හැකිය :

 diff foo <(ssh myServer 'cat foo')

නැතහොත්, දෙකම දුරස්ථ සේවාදායකවල තිබේ නම්:

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

12
ඔව්, මේ වගේ දෙයක්, නමුත් නාමාවලි සඳහා :)
ඇලෙක්සි ටිමානොව්ස්කි

ඩිරෙක්ටරි සඳහා ඔබ අදහස් කරන්නේ කෙසේද, සෑම විටම බළලුන් ls සමඟ ආදේශ කළ හැකිය
කයිල් බ්‍රැන්ඩ්

28
'ඩිරෙක්ටරි සඳහා' යන්නෙන් පුනරාවර්තන
වෙනසක් කිරීම

9
මගේ දුරස්ථ සත්කාරකයට මුරපදයක් අවශ්‍ය නම් මෙම තාක්ෂණය මට ප්‍රයෝජනවත් නොවන බව මට පෙනී ගියේය. මුරපද විමසුම නැවත හරවා යැවීම සමඟ හොඳින් ක්‍රියා කරන බවක් නොපෙනුණු අතර එය සාර්ථකව සම්පූර්ණ කළ නොහැක. ඔබ ssh යතුරු භාවිතා කරන්නේ නම් මෙය ගැටළුවක් නොවිය යුතුය.
ඇඩම් ෆ්‍රැන්කෝ

2
මෙය බොහෝ ගැටලුවලට හොඳ පොදු විසඳුමකි. 'Cat foo' වෙනුවට ඔබට 'find / foo / bar -type f | භාවිතා කළ හැකිය ගොනුව කියවන අතරතුර; do echo "**** $ file"; cat "$ file"; කර ඇත 'සහ ඔබට ගොනු නම් සහ ගොනු අන්තර්ගතයන් වෙනස් වීමට ලැයිස්තුවක් ඇත.
පෝල් ගියර්

109

අවසාන වශයෙන් මම විශිෂ්ට විසඳුමක් සොයා ගතිමි: 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 ද බලන්න .


8
නාමාවලි ගැන කුමක් කිව හැකිද? :)
පර්ල්නිකා

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 යතුරු ගොනු @JaredC සහිත දුරස්ථ ධාරක දෙකක් සමඟ ඔබට මෙය කළ හැක්කේ කෙසේද?
මැනටැක්ස්

63

සත්‍ය ලිපිගොනු වල වෙනසකට වඩා වෙනස් ගොනු මොනවාදැයි බැලීමට ඔබට අවශ්‍ය නම්, ඔබට භාවිතා කළ හැකිය rsync --dry-run


10
rsync -n යනු කෙටි අනුවාදයයි.
volni

නියමයි - ඔබට වෙනත් වරායක් භාවිතා කිරීමට අවශ්‍ය නම්, rsync -e "ssh -p 2222" <SRC> <DST> භාවිතා කරන්න
සමෝත්

16

මෙන්න තවත් ඉක්මන් හා අපිරිසිදු විධාන රේඛා වට්ටෝරුව. තෝරාගත් පිළිතුර මෙන් නොව, එය Makefiles තුළ ක්‍රියාත්මක වේ:

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

මගේ සංස්කරණය සිදු නොවන්නේ නම්: මෙම ක්‍රමය තෝරාගත් පිළිතුරට වඩා උසස් වන්නේ එය Makefiles සමඟ ක්‍රියා කරන බැවිනි.
ක්‍රිස් රෙඩ්ෆර්ඩ්

Te ස්ටීව් ඩිකින්සන් - “එය Makefiles තුළ ක්‍රියාත්මක වේ” යන්නෙන් ඔබ අදහස් කරන්නේ කුමක්ද?
මාටින් වෙග්ටර්

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 ඇතුළත් කළෙමි. ඉන්පසු මම මගේ නිවසේ නාමාවලියෙහි .gvfs dir හි සාදන ලද dir වෙනස විධානයෙහි භාවිතා කළෙමි.

diff -r --brief / home / user dir / .gvfs / SFTP \ මත \ 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" වලින් සාදන ලද උමගක් හරහා NFS (හෝ ssh සීමාව නොමැති වෙනත් සන්නිවේදනයන්) ය.


1

ඔබේ ~ / .bashrc හි සමහර විට bash ශ්‍රිතයක් නිර්මාණය කිරීමෙන් ඔබට ප්‍රවේශය සාමාන්‍යකරණය කිරීමට උත්සාහ කළ හැකිය.

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

ඉන්පසු එය වැනි ඉදිකිරීමක් සමඟ එය ආයාචනා කරන්න:

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

-S සමඟ වෙනස යෙදීමෙන්, ගොනු සමාන නම් මෙයද වාර්තා කරයි.

චියර්ස්! ජිම්


0

භාවිතා කිරීම grep

remote ip: 172.16.98.130
remote file: /etc/ssh/keys-root/authorized_keys
local file: ~/.ssh/id_rsa.pub

දැන් දුරස්ථ ගොනුවේ අන්තර්ගතය දේශීය ගොනුව සමඟ සසඳන්න grep

grep -w "$(cat ~/.ssh/id_rsa.pub)" <<< $(sshpass -p "mypassword" ssh root@172.16.98.130 'cat /etc/ssh/keys-root/authorized_keys')

grep විධානයේ සාර්ථකත්වය පරීක්ෂා කරන්න

echo $?
# 0

SSH මුරපද රහිත පිවිසුම සැකසීමට මෙම අදහස භාවිතා කිරීම:

if ! grep "$(cat ~/.ssh/id_rsa.pub)" <<< $(sshpass -p "mypassword" ssh root@172.16.98.130 cat /etc/ssh/keys-root/authorized_keys) &>/dev/null; then
  cat ~/.ssh/id_rsa.pub | sshpass -p "mypassword" ssh root@172.16.98.130 "cat >> /etc/ssh/keys-root/authorized_keys"
fi

ssh root@172.16.98.130

සටහන: අණට sshpassඅන්තර්ක්‍රියාකාරී නොවන මුරපදය යැවීම සඳහා පැකේජය ස්ථාපනය කර ඇති බවට වග බලා ගන්න ssh.


sshpass ඔබේ ලොග් වල සටහන් නොකළ මුරපදයක් තබන්න. මම මෙය නිෂ්පාදනයේදී භාවිතා නොකරමි. පිවිසුම් සඳහා SSH යතුරු සකසන්න.
මාර්ක් ස්ටුවර්ට්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.