Ravindra BagaleCourses & study guides English

SSH Deep Dive: Keys, ~/.ssh/config, ssh-agent, Tunnels, Jump Hosts, scp, rsync आणि sftp

जवळजवळ प्रत्येक Linux server पर्यंत SSH ने पोहोचतो. आधीच्या chapters मधे ssh ने login केलं; आता खोलवर: key types आणि ssh-keygen, ssh-copy-id ने keys copy, ~/.ssh/config file, ssh-agent, local, remote आणि dynamic tunnels, ProxyJump ने jump hosts, आणि scp, rsync आणि sftp ने files हलवणं. प्रत्येक command ला Why, What आणि How, खऱ्या teams मधल्या safe defaults सह.

या chapter मध्ये तुम्ही काय शिकाल

  • SSH keys बनवा आणि सांभाळा
  • ssh-copy-id ने servers वर keys
  • Typing वाचवायला ~/.ssh/config
  • ssh-agent आणि agent forwarding safely
  • Local, remote आणि dynamic tunnels आणि jump hosts
  • scp, rsync आणि sftp ने files copy

1. रोजचं उदाहरण: society gate आणि तुमची स्वतःची चावी

हे का लागतं?

तुमची housing society प्रत्येक flat owner ला चावी देते. Guard कडे कोणत्या चाव्या gate उघडू शकतात त्याची list असते. मागच्या wing मधल्या flat ला जायला आधी main gate मधून जाता. वारंवार जात असाल तर flat number आणि wing diary मधे लिहून ठेवता म्हणजे दरवेळी विचारावं लागत नाही.

हे काय आहे?

तुमची private key = खिशातली चावी (कधी share नाही). Public key = guard कडची copy (authorized_keys). Main gate = jump host (bastion). Diary = ~/.ssh/config. चालताना चावी हातात = ssh-agent.

कसं करायचं (step by step)

Key login कसं चालतंClient port 22 ला connect होऊन server ची host key तपासतो (known_hosts)Client तुमची public key देतोServer ती ~/.ssh/authorized_keys मधे शोधतोServer challenge पाठवतोतुमची private key sign करते (agent किंवा key file)Server signature verify करून login
Private key तुमच्या machine बाहेर कधी जात नाही.

2. ssh-keygen: key pair बनवा

हे का लागतं?

Passwords guess होऊ शकतात आणि servers वर बहुतेक disabled. Keys जास्त strong आणि automate होतात.

हे काय आहे?

ssh-keygen -t ed25519 -C 'comment' modern key: ~/.ssh/id_ed25519 (private) आणि id_ed25519.pub (public). Passphrase वापरा. -f file नाव. जुन्या systems साठीच -t rsa -b 4096. ssh-keygen -lf FILE fingerprint; -p passphrase बदल.

कसं करायचं (step by step)

  1. नवी key.
ssh-keygen -t ed25519 -C 'ravi@laptop'

Output:

Your identification has been saved in /home/ravi/.ssh/id_ed25519
The key fingerprint is: SHA256:Zr1x... ravi@laptop

याचा अर्थ: दोन files.

  1. CI साठी वेगळी key.
ssh-keygen -t ed25519 -f ~/.ssh/deploy_ci -N '' -C 'ci-deploy'

Output:

Your public key has been saved in /home/ravi/.ssh/deploy_ci.pub

याचा अर्थ: Robot साठी passphrase नाही; server वर restrict.

  1. Fingerprint.
ssh-keygen -lf ~/.ssh/id_ed25519.pub

Output:

256 SHA256:Zr1x... ravi@laptop (ED25519)

याचा अर्थ: Admin ला दिसणाऱ्याशी तुलना.

3. Key permissions आणि authorized_keys

हे का लागतं?

इतर users वाचू शकतील अशा keys SSH नाकारतो. चुकीच्या permissions हे key login fail होण्याचं मुख्य कारण.

हे काय आहे?

~/.ssh 700, private keys 600, authorized_keys 600, home group-writable नाही. authorized_keys मधे प्रत्येक line ला एक public key, सुरुवातीला from="10.0.0.0/8",command="...",no-port-forwarding सारखे options.

कसं करायचं (step by step)

  1. Permissions fix.
chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys && ls -ld ~/.ssh

Output:

drwx------ 2 ravi ravi 4096 ~/.ssh

याचा अर्थ: बरोबर.

  1. CI key restrict.
cat ~/.ssh/authorized_keys

Output:

from="10.0.9.0/24",no-agent-forwarding,no-pty ssh-ed25519 AAAAC3... ci-deploy

याचा अर्थ: फक्त CI subnet मधून, shell tty नाही.

  1. SELinux context.
restorecon -Rv ~/.ssh

Output:

Relabeled /home/ravi/.ssh/authorized_keys

याचा अर्थ: Files वेगळ्या पद्धतीने copy झाल्या असतील तर.

4. ssh-copy-id: तुमची key install

हे का लागतं?

Key हाताने copy केल्यास तुटलेल्या lines आणि चुकीच्या permissions. ssh-copy-id बरोबर करतो.

हे काय आहे?

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host remote authorized_keys मधे key जोडतो आणि permissions fix. एकदा password login (किंवा आधीची key) लागते. Cloud मधे बहुतेक launch वेळी keys set.

कसं करायचं (step by step)

  1. Copy.
ssh-copy-id -i ~/.ssh/id_ed25519.pub ravi@10.0.1.30

Output:

Number of key(s) added: 1
Now try logging into the machine

याचा अर्थ: झालं.

  1. फक्त ती key.
ssh -i ~/.ssh/id_ed25519 -o PasswordAuthentication=no ravi@10.0.1.30 hostname

Output:

app-30

याचा अर्थ: Key login चालतं.

5. ssh options: -i, -p, -v, -o आणि एक command चालवणं

हे का लागतं?

बहुतेक वेगळी key, वेगळा port, किंवा login का fail ते debug लागतं.

हे काय आहे?

-i KEY key निवडतो, -p PORT port, -v/-vv/-vvv debug output, -o Option=value कोणताही config option, -t tty. ssh host 'command' एक command चालवून परत. Hung session ला नवीन line वर ~. .

कसं करायचं (step by step)

  1. दुसरा port.
ssh -p 2222 ravi@bastion.example.com

Output:

Last login: ...

याचा अर्थ: sshd 2222 वर.

  1. एक command.
ssh ravi@app-30 'uptime; df -h /'

Output:

10:02 up 41 days, load 0.21
/dev/nvme0n1p1 20G 11G 9G 55% /

याचा अर्थ: Shell शिवाय quick checks.

  1. Debug.
ssh -v ravi@app-30 2>&1 | grep -E 'Offering|Authenticated|denied'

Output:

debug1: Offering public key: /home/ravi/.ssh/id_ed25519 ED25519
debug1: Authenticated to app-30

याचा अर्थ: कोणती key वापरली ते.

  1. अनेक servers वर.
for h in app-30 app-31; do ssh -o BatchMode=yes $h hostname; done

Output:

app-30
app-31

याचा अर्थ: BatchMode password विचारण्याऐवजी fail.

6. known_hosts आणि host key warnings

हे का लागतं?

Host key सिद्ध करते की तुम्ही खऱ्या server ला पोहोचलात, attacker ला नाही. Rebuilt servers ची बदलते, आणि SSH warn करतो.

हे काय आहे?

~/.ssh/known_hosts host keys ठेवतं. 'REMOTE HOST IDENTIFICATION HAS CHANGED' म्हणजे key वेगळी. Server rebuild झाला हे माहीत असेल तर ssh-keygen -R host ने जुनी line काढा. ssh-keyscan host host keys print (दुसऱ्या मार्गाने verify).

कसं करायचं (step by step)

  1. Warning.
ssh ravi@10.0.1.30

Output:

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
Offending ED25519 key in /home/ravi/.ssh/known_hosts:14

याचा अर्थ: थांबा आणि rebuild confirm.

  1. जुनी key काढा.
ssh-keygen -R 10.0.1.30

Output:

# Host 10.0.1.30 found: line 14
/home/ravi/.ssh/known_hosts updated.

याचा अर्थ: पुढच्या login ला नवी accept.

  1. Automation साठी आधीच.
ssh-keyscan -t ed25519 git.example.com >> ~/.ssh/known_hosts

Output:

# git.example.com:22 SSH-2.0-OpenSSH_9.6

याचा अर्थ: आधी fingerprint verify.

7. ~/.ssh/config: settings save

हे का लागतं?

दिवसातून अनेक वेळा ssh -i ~/.ssh/k -p 2222 ec2-user@15.1.2.3 type करणं slow आणि चुका.

हे काय आहे?

Blocks Host ALIAS ने सुरू, मग HostName, User, Port, IdentityFile, IdentitiesOnly yes, ProxyJump, ServerAliveInterval. Host * सगळ्यांसाठी defaults. File 600. scp, rsync आणि git पण aliases वापरतात.

कसं करायचं (step by step)

  1. Config file.
cat ~/.ssh/config

Output:

Host web1
  HostName 15.1.2.3
  User ec2-user
  IdentityFile ~/.ssh/aws_prod.pem
  IdentitiesOnly yes
Host *
  ServerAliveInterval 30

याचा अर्थ: आता फक्त: ssh web1

  1. ssh काय वापरेल.
ssh -G web1 | grep -E '^(hostname|user|identityfile)'

Output:

hostname 15.1.2.3
user ec2-user
identityfile ~/.ssh/aws_prod.pem

याचा अर्थ: Final merged settings.

  1. Wildcards.
Host app-*
  User deploy
  ProxyJump bastion

Output:

(config)

याचा अर्थ: सगळे app hosts bastion मार्गे.

8. ssh-agent आणि ssh-add

हे का लागतं?

Passphrase असेल तर प्रत्येक login ला type करावा लागेल. Agent session भर unlocked key memory मधे ठेवतो.

हे काय आहे?

eval "$(ssh-agent -s)" सुरू. ssh-add ~/.ssh/id_ed25519 key load; ssh-add -l list; ssh-add -D सगळ्या काढा; ssh-add -t 3600 lifetime. Agent forwarding (ssh -A) remote host ला तुमचा agent वापरू देतो; फक्त विश्वासाच्या hosts वर, ProxyJump जास्त चांगलं.

कसं करायचं (step by step)

  1. सुरू आणि add.
eval "$(ssh-agent -s)" && ssh-add -t 8h ~/.ssh/id_ed25519

Output:

Agent pid 4412
Identity added: /home/ravi/.ssh/id_ed25519 (ravi@laptop)
Lifetime set to 28800 seconds

याचा अर्थ: Passphrase एकदाच.

  1. List.
ssh-add -l

Output:

256 SHA256:Zr1x... ravi@laptop (ED25519)

याचा अर्थ: Load झाली.

  1. खूप keys.
ssh web1

Output:

Received disconnect: Too many authentication failures

याचा अर्थ: Agent 6 keys देतो; IdentitiesOnly yes.

9. ProxyJump: bastion मार्गे private servers

हे का लागतं?

Private servers ना public IP नाही. Key copy न करता jump host (bastion) मार्गे जायचं.

हे काय आहे?

ssh -J user@bastion user@private bastion मार्गे; key local राहते. Commas ने chain: -J b1,b2. Config मधे: ProxyJump bastion. जुनी पद्धत: ProxyCommand ssh -W %h:%p bastion.

कसं करायचं (step by step)

  1. एक jump.
ssh -J ec2-user@bastion.example.com ec2-user@10.0.3.40

Output:

[ec2-user@db-40 ~]$

याचा अर्थ: Private subnet मधे.

  1. Config पद्धत.
Host bastion
  HostName bastion.example.com
  User ec2-user
Host db40
  HostName 10.0.3.40
  ProxyJump bastion

Output:

ssh db40

याचा अर्थ: तेच, छोटं.

  1. Jump मार्गे scp.
scp -J bastion backup.sql db40:/tmp/

Output:

backup.sql 100% 40MB 22MB/s

याचा अर्थ: Config ने rsync पण.

10. Local port forwarding: ssh -L

हे का लागतं?

Database किंवा admin page फक्त private network मधे. -L ते safely तुमच्या laptop वर आणतो.

हे काय आहे?

ssh -L LOCALPORT:TARGET:TARGETPORT host. localhost:LOCALPORT ला traffic host मार्गे TARGET:TARGETPORT कडे. फक्त tunnel साठी -N (command नाही) आणि -f (background). फक्त 127.0.0.1 वर bind (default).

कसं करायचं (step by step)

  1. Private Postgres.
ssh -N -L 15432:db.internal:5432 bastion

Output:

(waits)

याचा अर्थ: आता laptop वर psql -h localhost -p 15432.

  1. Admin page.
ssh -fN -L 8080:127.0.0.1:8080 web1 && curl -sI http://localhost:8080

Output:

HTTP/1.1 200 OK

याचा अर्थ: web1 वर localhost ला bound app.

  1. Port वापरात.
ssh -N -L 8080:127.0.0.1:8080 web1

Output:

bind [127.0.0.1]:8080: Address already in use

याचा अर्थ: दुसरा local port.

11. Remote (-R) आणि dynamic (-D) forwarding

हे का लागतं?

-R remote server ला तुमच्या बाजूचं काही (जसं demo app) पोहोचू देतो. -D private network browse करायला SOCKS proxy.

हे काय आहे?

ssh -R REMOTEPORT:localhost:LOCALPORT host, host वर REMOTEPORT उघडतो जो तुमच्याकडे परत येतो. Default ला server च्या localhost ला bind (GatewayPorts). ssh -D 1080 host localhost:1080 वर SOCKS5 proxy.

कसं करायचं (step by step)

  1. Local app share.
ssh -N -R 9000:localhost:3000 web1

Output:

(waits)

याचा अर्थ: web1 वर: curl localhost:9000 तुमच्या laptop चा 3000.

  1. SOCKS proxy.
ssh -N -D 1080 bastion &
curl --socks5-hostname localhost:1080 http://grafana.internal:3000/login -sI

Output:

HTTP/1.1 200 OK

याचा अर्थ: Private hosts नावाने browse.

12. scp: साधा copy

हे का लागतं?

Server ला किंवा server कडून एक file पाठवायचा सगळ्यात जलद मार्ग.

हे काय आहे?

scp SRC DEST, remote paths host:path. Folders साठी -r, -P PORT (capital P), -i KEY, -J jump. Modern OpenSSH आत scp SFTP वर चालवतो. मोठ्या किंवा वारंवार copies साठी rsync.

कसं करायचं (step by step)

  1. Upload.
scp app.tar.gz web1:/tmp/

Output:

app.tar.gz 100% 18MB 30.1MB/s 00:00

याचा अर्थ: Config alias.

  1. Folder download.
scp -r web1:/var/log/nginx ./nginx-logs

Output:

access.log 100% 220MB
error.log 100% 3MB

याचा अर्थ: Recursive copy.

  1. Custom port.
scp -P 2222 report.pdf ravi@bastion.example.com:~

Output:

report.pdf 100%

याचा अर्थ: scp साठी capital P.

scp सविस्तर: upload, download, -r, -P, -i आणि server ते server

हे का लागतं?

Server वर file टाकायची किंवा log laptop वर आणायचा, हे नेहमी लागतं. scp हे SSH वरून करतो, म्हणून encrypted, आणि तुमच्या existing keys वापरतो.

हे काय आहे?

scp cp सारखं copy करतो, पण एक बाजू host:path असते. पहिला path source, शेवटचा destination. Remote path user@host:/path सारखा.

नेहमीचे options

Optionकाय करतो
-rFolder आणि आतलं सगळं copy.
-P PORTSSH port (capital P; ssh ला small -p).
-i KEYही private key file वापरा.
-3तुमच्या machine मधून server ते server copy.
-CTransfer करताना compress.
-pTimes आणि modes ठेवा.
-l KBITBandwidth Kbit/s मधे मर्यादित.

कसं करायचं (step by step)

  1. Upload: आधी local file, शेवटी server.
scp menu-diwali.pdf rohan@192.168.1.40:/var/www/cafe/

Output:

menu-diwali.pdf      100%  812KB  9.8MB/s   00:00

याचा अर्थ: File आता server वर /var/www/cafe/ मधे.

  1. Download: आधी server, शेवटी local.
scp rohan@192.168.1.40:/var/log/nginx/error.log ~/Downloads/

Output:

error.log            100%   64KB  7.1MB/s   00:00

याचा अर्थ: शेवटचा path . म्हणजे current folder.

  1. -r ने आख्खा folder.
scp -r invoices-oct rohan@192.168.1.40:~/backup/

Output:

inv-001.pdf  100%  ...
inv-002.pdf  100%  ...

याचा अर्थ: -r नसेल तर "not a regular file".

  1. -P ने custom port.
scp -P 2022 db.sql.gz rohan@shop.example.in:/tmp/

Output:

db.sql.gz            100%   18MB  11MB/s   00:01

याचा अर्थ: Server वर SSH 22 नाही, 2022 वर.

  1. -i ने key file (cloud servers).
scp -i ~/keys/mumbai.pem app.jar ubuntu@13.233.10.5:/opt/app/

Output:

app.jar              100%   42MB  20MB/s   00:02

याचा अर्थ: .pem key chmod 600 हवी, नाहीतर SSH नाकारतो.

  1. Server ते server.
scp -3 old-db:/backup/shop.sql new-db:/restore/

Output:

shop.sql             100%  120MB  30MB/s   00:04

याचा अर्थ: -3 data तुमच्या laptop मधून पाठवतो, त्यामुळे दोन servers ना एकमेकांच्या keys लागत नाहीत. -3 नसेल तर पहिला server थेट दुसऱ्याला जोडतो.

खालच्या tasks मधे सराव करा: सराव tasks

13. rsync: SSH वर smart sync

हे का लागतं?

rsync फक्त बदललेलं पाठवतो, resume करतो, आणि permissions ठेवतो. Deploys, backups आणि migrations साठीचं tool.

हे काय आहे?

rsync -avz SRC/ host:DEST/: -a archive (perms, times, links), -v verbose, -z compress. -n (--dry-run) काय होईल ते. --delete DEST मधल्या जास्तीच्या files काढतो (सावध). --progress, --partial, -e 'ssh -p 2222'. SRC वर trailing slash म्हणजे 'आतलं content'.

Optionअर्थ
-aArchive: perms, times, links ठेवा
-zTransit मधे compress
-nDry run
--deleteMirror: जास्तीचं काढा
--excludePattern skip
-PProgress + partial

कसं करायचं (step by step)

  1. आधी dry run.
rsync -avzn --delete ./site/ web1:/var/www/site/

Output:

deleting old.html
index.html
sent 1.2K bytes

याचा अर्थ: Delete आधी दाखवतो.

  1. खरं run.
rsync -avz --delete ./site/ web1:/var/www/site/

Output:

index.html
sent 4.8K bytes received 92 bytes

याचा अर्थ: फक्त बदल.

  1. Excludes सह backup.
rsync -aP --exclude 'cache/' web1:/srv/data/ /backup/data/

Output:

data/big.bin 2.1G 100% 95MB/s

याचा अर्थ: Resumable मोठी copy.

  1. Slash महत्त्वाचा.
rsync -a src web1:/opt/  vs  rsync -a src/ web1:/opt/

Output:

/opt/src/...  vs  /opt/...

याचा अर्थ: Slash सह: फक्त content.

14. sftp: interactive file transfer

हे का लागतं?

Partners आणि non-Linux users ना बहुतेक SFTP-only accounts. Shell शिवाय browse आणि transfer.

हे काय आहे?

sftp user@host prompt उघडतो: ls, cd, lcd, get, put, mkdir, rm, bye. -b batchfile file मधले commands (scripts साठी). Servers ChrootDirectory आणि ForceCommand internal-sftp ने users ना SFTP मधे बंद करतात.

कसं करायचं (step by step)

  1. Interactive.
sftp vendor@files.example.com
sftp> cd inbound
sftp> put invoice-oct.csv
sftp> bye

Output:

Uploading invoice-oct.csv to /inbound/invoice-oct.csv

याचा अर्थ: Upload झालं.

  1. Batch mode.
printf 'cd outbound\nget *.csv\n' > b.txt && sftp -b b.txt vendor@files.example.com

Output:

Fetching /outbound/orders.csv

याचा अर्थ: Cron jobs साठी.

15. अनेक industries मधली खरी उदाहरणं

हे का लागतं?

तेच Linux skill प्रत्येक प्रकारच्या company मध्ये लागतं. वेगवेगळ्या ठिकाणी पाहिलं की लक्षात राहतं.

हे काय आहे?

प्रत्येक row म्हणजे एक काल्पनिक team. कोण हे वापरतं आणि कसं ते दाखवते.

कसं करायचं (step by step)

Team आणि शहरते कसं वापरतातCommand
Vikram, IT services, Puneसगळ्या private servers साठी ProxyJumpssh -J bastion db40
Sarah, healthcare, Bostonfrom= options ने CI keys restrictfrom="10.0.9.0/24" ssh-ed25519 ...
Yuki, gaming, Tokyoआधी dry run सह rsync deploysrsync -avzn --delete ./build/ web1:/srv/
Carlos, retail, Mexico CitySuppliers सह SFTP batch jobssftp -b b.txt vendor@files
Nadia, bank, FrankfurtAudits साठी private DBs ला tunnelsssh -N -L 15432:db.internal:5432 bastion
Omkar, agri startup, Sataraनीटनेटका ~/.ssh/configssh -G web1

16. नेहमीच्या errors आणि त्यांचे fixes

हे का लागतं?

हे errors सगळ्यांना येतात. कारण माहीत असलं की तास वाचतात.

हे काय आहे?

आधी नेमका message वाचा. मग खालच्या row शी जुळवा.

कसं करायचं (step by step)

दिसणारा errorका होतंFix कसा करायचा
Permission denied (publickey)authorized_keys मधे key नाही, चुकीचा user किंवा keyकोणती key दिली ते debug.
ssh -v user@host
UNPROTECTED PRIVATE KEY FILE!Private key इतरांना वाचता येते600 करा.
chmod 600 ~/.ssh/id_ed25519
REMOTE HOST IDENTIFICATION HAS CHANGEDHost key बदलली: rebuild किंवा attackConfirm करून जुनी key काढा.
ssh-keygen -R host
Too many authentication failuresAgent ने खूप keys दिल्यानिवडलेल्या key सह IdentitiesOnly.
ssh -o IdentitiesOnly=yes -i KEY host
Connection timed out (port 22)Security group/firewall 22 blockतुमचा IP allow किंवा bastion.
nc -zv -w 3 host 22
Could not open a connection to your authentication agentया shell मधे agent नाहीसुरू करा.
eval "$(ssh-agent -s)"
bind: Address already in use (tunnel)Local port busyदुसरा local port.
ss -ltnp 'sport = :8080'
rsync: command not found (remote)दुसऱ्या बाजूला rsync नाहीतिथे install.
ssh web1 'sudo dnf install -y rsync'
scp: ssh: connect to host ... port 22: Connection refused with -p-P ऐवजी -pscp ला capital -P.
scp -P 2222 file host:
channel 2: open failed: connect failed: Connection refusedTunnel target listening नाहीSSH server वरून target host:port.
ssh bastion 'nc -zv db.internal 5432'

17. Troubleshooting step by step

हे का लागतं?

SSH login fail झालं की network पासून auth पर्यंत.

हे काय आहे?

वरून खाली जा. ज्या step ला problem दिसतो तिथे थांबा.

कसं करायचं (step by step)

  1. Port open?
nc -zv -w 3 host 22
  1. बरोबर settings?
ssh -G host | head
  1. कोणती key?
ssh -v host
  1. Permissions ठीक?
ls -la ~/.ssh
  1. Server log.
sudo journalctl -u sshd -n 30
  1. Server वर key?
grep -c ssh-ed25519 ~/.ssh/authorized_keys

18. Lab 1: Keys, config आणि agent

हे का लागतं?

Key बनवा, host वर install करा (localhost पण चालतं), आणि alias ने login.

हे काय आहे?

पूर्ण hands-on lab. प्रत्येक step test Linux machine वर करा (EC2 instance, VM किंवा WSL).

कसं करायचं (step by step)

  1. बनवा.
ssh-keygen -t ed25519 -f ~/.ssh/lab_key -C lab

Output:

Your identification has been saved
  1. localhost वर install.
ssh-copy-id -i ~/.ssh/lab_key.pub $USER@localhost

Output:

Number of key(s) added: 1
  1. Config alias.
printf 'Host lab\n  HostName localhost\n  IdentityFile ~/.ssh/lab_key\n  IdentitiesOnly yes\n' >> ~/.ssh/config; chmod 600 ~/.ssh/config

Output:

(no output)
  1. Agent load.
eval "$(ssh-agent -s)"; ssh-add ~/.ssh/lab_key

Output:

Identity added
  1. Login.
ssh lab hostname

Output:

yourhost

19. Lab 2: Tunnel आणि sync

हे का लागतं?

Tunnel मार्गे localhost-only web server पोहोचा आणि rsync ने folder sync.

हे काय आहे?

पूर्ण hands-on lab. प्रत्येक step test Linux machine वर करा (EC2 instance, VM किंवा WSL).

कसं करायचं (step by step)

  1. Private server.
python3 -m http.server 8001 --bind 127.0.0.1 &

Output:

Serving HTTP on 127.0.0.1 port 8001
  1. Tunnel.
ssh -fN -L 9001:127.0.0.1:8001 lab

Output:

(no output)
  1. Test.
curl -sI http://localhost:9001

Output:

HTTP/1.0 200 OK
  1. Dry-run sync.
mkdir -p /tmp/a && touch /tmp/a/f1 && rsync -avn /tmp/a/ lab:/tmp/b/

Output:

f1
  1. खरं sync.
rsync -av /tmp/a/ lab:/tmp/b/

Output:

sent 120 bytes

Ravindra Bagale's Tip

Put every server in ~/.ssh/config with IdentitiesOnly yes and use ProxyJump instead of agent forwarding (-A). Your key never sits on the bastion, and a hacked bastion cannot use your agent.

20. नेहमी विचारले जाणारे प्रश्न

प्र. ed25519 की RSA?

ed25519: छोटी, जलद, modern. जुन्या systems साठीच RSA 4096.

प्र. Teammate ला private key देऊ?

कधी नाही. प्रत्येकाची स्वतःची key.

प्र. scp की rsync?

मोठ्या, वारंवार किंवा resumable copies साठी rsync.

प्र. -N काय करतो?

Remote command नाही; फक्त tunnel.

प्र. Agent forwarding unsafe?

Connected असताना remote host वरचा root तुमचा agent वापरू शकतो.

प्र. rsync --delete ची भीती का?

Destination मधल्या files काढतो; आधी नेहमी dry-run.

प्र. SSH drop होऊ नये?

Config मधे ServerAliveInterval 30.

प्र. Bastion म्हणजे?

Private network ला एकमेव SSH entry असलेला hardened jump host.

21. मुलाखत प्रश्न आणि उत्तरं

Beginner level

प्र. Modern key?

ssh-keygen -t ed25519.

प्र. Server ला key?

ssh-copy-id user@host.

प्र. Server ला file?

scp file host:/path.

प्र. Private key permissions?

600.

Mid level level

प्र. Laptop वरून private DB?

ssh -L 15432:db:5432 bastion.

प्र. ProxyJump?

Keys copy न करता jump host मार्गे connect.

प्र. Rebuild नंतर host key changed?

ssh-keygen -R host, मग reconnect आणि verify.

प्र. rsync trailing slash?

SRC/ content; SRC folder स्वतः.

Senior level

प्र. Fleet वर SSH harden?

फक्त keys, root login नाही, AllowGroups, MFA/SSO certs, bastion, logging.

प्र. Leaked key rotate?

सगळ्या authorized_keys मधून काढा (config mgmt), नवी key, logs audit.

प्र. -L vs -R vs -D?

-L remote local वर, -R local remote वर, -D SOCKS proxy.

प्र. SSH certificates का?

Short-lived signed keys; authorized_keys पसारा नाही.

घरी करून बघा

  1. तीन hosts सह ~/.ssh/config बनवा त्यात एक ProxyJump, आणि प्रत्येक ssh -G ने तपासा.
  2. दोन folders तुलना करायला rsync -avn वापरा आणि output ची प्रत्येक line समजवा.

सराव Tasks

या scenario बद्दल

London Legal LLP हा लंडन मधला कायदा सेवा व्यवसाय आहे. Oliver Hughes त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे GBP मध्ये मोजले जातात आणि AWS resources eu-west-2 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 23

सोपं Modern key

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: ops@build comment सह ed25519 key.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Fingerprint

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: ~/.ssh/gitlab_key.pub चा fingerprint.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Key install

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: 10.0.8.8 वर user deploy साठी ~/.ssh/gitlab_key.pub install.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Key permission fix

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: ~/.ssh/gitlab_key फक्त तुम्हाला वाचता यावी.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं दुसरा port

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: port 2200 वर admin@gw.example.org ला SSH.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं एक key काढा

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: Agent मधून फक्त ~/.ssh/gitlab_key काढा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Folder खाली copy

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: host web2 वरून /etc/nginx folder current folder मधे.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं File upload

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: scp ने invoice.pdf 10.0.4.7 वर user meera म्हणून /tmp/ ला.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं File download

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: scp ने 10.0.4.7 (user meera) वरून /var/log/app.log current folder मधे.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम नाव असलेली key file

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: ~/.ssh/gitlab_key file मधे ed25519 key.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम एक remote command

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: Shell न उघडता app-50 वर free -h.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Host key काढा

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: 10.0.8.8 ची जुनी known_hosts entry काढा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Final settings

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: app-50 साठी ssh वापरणार असलेल्या merged settings.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Lifetime सह agent

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: ~/.ssh/gitlab_key agent मधे 2 तासांसाठी.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Bastion मार्गे

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: jump host admin@jump.example.org मार्गे admin@10.0.9.12.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Port वर scp

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: scp ने port 2200 वर notes.txt gw च्या home folder ला.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Exclude सह rsync

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: ./photos/ nas:/backup/photos/ ला archive copy पण tmp folder skip.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Key सह scp

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: ~/.ssh/ops.pem key वापरून build.zip ec2-user@3.6.9.12 च्या home ला.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड Local tunnel

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: gw मार्गे local port 13306 ते mysql.internal:3306, shell नाही.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड SOCKS proxy

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: gw मार्गे local port 1081 वर SOCKS proxy, shell नाही.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड rsync dry run

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: delete, archive, verbose सह ./dist/ ते web2:/srv/app/ mirror preview.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड Server ते server

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: host app1 वरची /srv/dump.sql host app2 च्या /srv/ ला, data तुमच्या machine मधून.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड Port वर folder

का: SSH प्रत्येक server चं मुख्य दार.

काय करायचं: site folder host gw वर user deploy म्हणून /var/www/ ला, SSH port 2222.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

थोडक्यात सांगायचं तर

  1. ssh-keygen -t ed25519 keys; 600 आणि passphrase.
  2. ssh-copy-id keys install.
  3. ~/.ssh/config hosts, users, keys, jumps.
  4. ssh-agent unlocked keys ठेवतो.
  5. Jump hosts साठी -J; tunnels साठी -L, -R, -D.
  6. scp साधा, rsync smart, sftp interactive.

उजळणी, तुलना आणि मुलाखत cards

हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.

4 steps मधे SSH keys. Passwords नाहीत. ssh-keygen -t ed25519. Server ला ssh-copy-id. मग login.
उजळणी card: 4 steps मधे SSH keys · PNG download करा · Card page उघडा
~/.ssh/config. Hosts साठी छोटी नावं. Host, HostName, User, IdentityFile. Bastion साठी ProxyJump. फक्त नाव.
उजळणी card: ~/.ssh/config · PNG download करा · Card page उघडा
scp vs rsync. प्रत्येक वेळी सगळं. / फक्त बदल.
तुलना: scp vs rsync · PNG download करा · Card page उघडा
ssh -L vs ssh -R. Local port remote target ला. / Remote port तुमच्याकडे.
तुलना: ssh -L vs ssh -R · PNG download करा · Card page उघडा
Permission denied (publickey)?. Key आणि user. .ssh 700, keys 600. Debug.
मुलाखत card: Permission denied (publickey)? · PNG download करा · Card page उघडा
Agent forwarding धोका?. Jump host वर root तुमचा agent वापरू शकतो. ProxyJump वापरा. Jump.
मुलाखत card: Agent forwarding धोका? · PNG download करा · Card page उघडा
-L vs -R?. -L: local port ते remote target. -R: remote port तुमच्याकडे. Local tunnel.
मुलाखत card: -L vs -R? · PNG download करा · Card page उघडा
scp vs rsync?. scp सगळं copy. rsync फक्त बदल. Mirror.
मुलाखत card: scp vs rsync? · PNG download करा · Card page उघडा

अजून cards: Ravi Sir's Cards.