Installing and running openSSH on Merlin - XIYO/asuswrt-merlin.ng-kr GitHub Wiki

Merlinμ—μ„œ openSSH μ„€μΉ˜ 및 μ‹€ν–‰

μ €λŠ” 연결을 μ„€μ •ν•˜λŠ” 데 λ„ˆλ¬΄ 였랜 μ‹œκ°„μ΄ 걸리고 1λΆ„ λ˜λŠ” 2λΆ„λ§ˆλ‹€ 연결이 λŠκΈ°λŠ” dropbear에 μ§€μ³€μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ Merlinμ—μ„œ openssh-serverλ₯Ό μ‹€ν–‰ν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€.

  • RT-AC68Uμ—μ„œ 386.5_2λ₯Ό μ‹€ν–‰ 쀑인 κ²ƒμœΌλ‘œ ν…ŒμŠ€νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • μ œκ°€ μ§„ν–‰ν•˜λ©΄μ„œ λ¬Έμ„œν™”ν•˜κ³  있으며 이것은 μ²˜μŒλΆ€ν„° μ² μ €ν•˜κ²Œ ν…ŒμŠ€νŠΈλ˜μ§€ μ•Šμ•˜μœΌλ©° 제 λ¬Έμ„œκ°€ λΆˆμ™„μ „ν•˜κ±°λ‚˜ 잘λͺ»λ  수 μžˆμ§€λ§Œ μ—¬μ „νžˆ μ‹œμž‘μ μœΌλ‘œ μ‚¬μš©λ  κ²ƒμž…λ‹ˆλ‹€. λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ μž‘λ™ μ—¬λΆ€λ₯Ό ν™•μΈν•˜κ±°λ‚˜ ν•„μš”μ— 따라 μ—…λ°μ΄νŠΈν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€.
  • SSH μ„œλ²„ 및 ν΄λΌμ΄μ–ΈνŠΈλ₯Ό CLIλ₯Ό 톡해 μ„€μ •ν•˜κ³  κ΅¬μ„±ν•˜λŠ” κΈ°λ³Έ 사항을 μ•Œκ³  μ΄ν•΄ν•˜κ³  μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.
  • μ „μ œ 쑰건 (예: opkg, jffs, 파일 νŽΈμ§‘ 방법)을 κ°„κ³Όν•˜κ±°λ‚˜ μ™„μ „νžˆ λ¬΄μ‹œν•©λ‹ˆλ‹€.
  • ꡬ성 및 μ„€μ • μ˜΅μ…˜ (예: RSA λŒ€ DSA λŒ€ ECDSA)을 λ¬΄μ‹œν•˜κ±°λ‚˜ κ±΄λ„ˆ λ›°λ©° λ‹€λ₯Έ ν™˜κ²½ λ˜λŠ” 심지어 λ‚΄ 섀정에 더 λ˜λŠ” 덜 적합할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ‹¨μˆœν™”λ₯Ό μœ„ν•΄ 이 μ˜ˆμ œλ“€μ€ sshdκ°€ LANμ—μ„œλ§Œ λ“£λ„λ‘ν•˜κ³  192.168.1.1μ—λ§Œ μžˆλŠ” κ²ƒμœΌλ‘œ κ°€μ •ν•©λ‹ˆλ‹€.
  • 더 λ‚˜μ€ λ°©λ²•μœΌλ‘œ μˆ˜ν–‰ν•  수 μžˆλŠ” 것듀이 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. μ €λŠ” μ—¬κΈ°μ„œ 배우렀고 ν•©λ‹ˆλ‹€.#### μ‹œμž‘ν•˜κΈ°

openssh νŒ¨ν‚€μ§€ μ„€μΉ˜: opkg install openssh-keygen openssh-server

μ„œλ²„ ν‚€ 생성: ssh-keygen -f /opt/etc/ssh/ssh_host_rsa_key

λ§Œμ•½ 곡개 ν‚€κ°€ μžˆλ‹€λ©΄, ~/.ssh/authorized_keys에 곡개 ν‚€λ₯Ό λ„£μœΌμ„Έμš”.

/opt/etc/ssh/sshd_config νŒŒμΌμ„ νŽΈμ§‘ν•˜μ„Έμš”. ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ λ‹€μŒκ³Ό 같은 라인을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€:

ListenAddress 192.168.1.1
Port 2222
PermitRootLogin yes
Ciphers [email protected],[email protected],aes256-ctr,aes256-cbc

SSH ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ ~/.ssh/config νŒŒμΌμ„ ν•„μš”μ— 맞게 νŽΈμ§‘ν•˜μ„Έμš”. λ‹€μŒκ³Ό 같이 μΆ”κ°€ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€: HostKeyAlgorithms +rsa-sha2-512,rsa-sha2-256

μ„œλ²„λ₯Ό μ‹œμž‘ν•˜λ €κ³  μ‹œλ„ν•˜λ©΄ μ‹€νŒ¨ν•  κ°€λŠ₯성이 λ†’κ³ , λ‘œκ·ΈμΈμ„ μ‹œλ„ν•˜λ©΄ "계정 만료"에 λŒ€ν•œ 였λ₯˜κ°€ λ°œμƒν•  κ²ƒμž…λ‹ˆλ‹€. μ΄λŸ¬ν•œ 문제λ₯Ό "ν•΄κ²°"ν•˜μ—¬ /etc/shadow 및 /etc/passwd νŒŒμΌμ„ μˆ˜μ •ν•˜μ„Έμš”.

/etc/shadow νŒŒμΌμ„ νŽΈμ§‘ν•˜μ—¬ "admin" λΌμΈμ—μ„œ λ§ˆμ§€λ§‰ "0"을 μ œκ±°ν•˜μ„Έμš”:

이전: admin:$1$xxxxxxxxxxxxxxxxxxxxxxxxxxxx:0:0:99999:7:0:0:

이후: admin:$1$xxxxxxxxxxxxxxxxxxxxxxxxxxxx:0:0:99999:7:0::

λ˜λŠ” /etc/shadowλ₯Ό νŽΈμ§‘ν•˜λŠ” λŒ€μ‹  λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜μ—¬ μˆ˜μ •ν•˜μ„Έμš”(μœ„μ™€ κ°™μŒ): sed -i.bak.sshd '/^admin/ s!:0:$!::!' /etc/shadow

/etc/passwd에 "sshd" μ‚¬μš©μžλ₯Ό μΆ”κ°€ν•˜μ„Έμš”. 이λ₯Ό νŽΈμ§‘ν•˜κ±°λ‚˜ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•˜μ—¬ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€: echo 'sshd:x:22:65534:OpenSSH Server:/opt/var/empty:/dev/null' >> /etc/passwd#### μ„œλ²„κ°€ μ‹œμž‘λ˜κ³  μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” ν…ŒμŠ€νŠΈ:

/opt/sbin/sshd -Dλ₯Ό μ‹€ν–‰ν•˜μ„Έμš”.

μ˜¬λ°”λ₯Έ μ„œλ²„κ°€ μ˜¬λ°”λ₯Έ ν¬νŠΈμ—μ„œ μˆ˜μ‹  λŒ€κΈ° 쀑인지 ν™•μΈν•˜κΈ° μœ„ν•΄ telnet을 μ‚¬μš©ν•˜μ„Έμš”: telnet 192.168.1.1 2222λ₯Ό μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό μœ μ‚¬ν•œ λ‚΄μš©μ΄ ν‘œμ‹œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€: SSH-2.0-OpenSSH_9.0

λ°μŠ€ν¬ν†±/λ…ΈνŠΈλΆ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λΌμš°ν„°λ‘œ ssh μ—°κ²°ν•˜μ„Έμš”. 포트 번호λ₯Ό 주의 깊게 ν™•μΈν•˜κ³  (μ„ νƒμ μœΌλ‘œ) 상세 λͺ¨λ“œ(ssh -v)λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„μ˜ 버전 정보λ₯Ό 두 번 ν™•μΈν•˜μ„Έμš”. λ‹€μŒκ³Ό 같은 λ‚΄μš©μ„ μ°Ύμ•„μ•Ό ν•©λ‹ˆλ‹€: debug1: Remote protocol version 2.0, remote software version OpenSSH_9.0

ν•„μš”ν•œ 경우 /opt/sbin/sshd -d -o 'Port=2222' λ˜λŠ” μœ μ‚¬ν•œ λͺ…령을 μ‚¬μš©ν•˜μ—¬ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΅œμ’…μ μœΌλ‘œ λͺ¨λ“  μ˜΅μ…˜μ€ /opt/etc/ssh/sshd_configμ—μ„œ μ„€μ •λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

이 μ‹œμ μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” 경우 μ–΄λ–€ λ¬Έμ œκ°€ μžˆλŠ”μ§€ 및 μ–΄λ–»κ²Œ ν•΄κ²°ν–ˆλŠ”μ§€ μ•Œλ €μ£Όμ„Έμš”.#### 포트 번호 κ΅¬μ„±ν•˜κΈ°

이 μ‹œμ μ—μ„œ μž‘λ™ν•œλ‹€λ©΄... 포트 번호λ₯Ό κ·ΈλŒ€λ‘œ λ‘κ±°λ‚˜ λ‹€μŒμ„ μˆ˜ν–‰ν•˜μ„Έμš”.

GUIλ₯Ό μ‚¬μš©ν•˜μ—¬ (dropbear) sshλ₯Ό λ‹€λ₯Έ 포트둜 λ³€κ²½ν•˜μ„Έμš”. 예: 2222. 이 ν¬νŠΈλŠ” λ³€κ²½ κ°€λŠ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€. 2222 λ˜λŠ” μ—¬κΈ°μ„œ μ‚¬μš©ν•˜λŠ” λ‹€λ₯Έ 포트 λ²ˆν˜Έμ—μ„œ μˆ˜μ‹  λŒ€κΈ° 쀑인 sshd ν”„λ‘œμ„ΈμŠ€λ₯Ό μ’…λ£Œν•˜μ„Έμš”.

그런 λ‹€μŒ /opt/etc/ssh/sshd_config νŒŒμΌμ„ μ—΄κ³  포트 22μ—μ„œ μˆ˜μ‹  λŒ€κΈ°ν•˜λ„λ‘ λ³€κ²½ν•˜μ„Έμš”.

μˆ˜μ‹  λŒ€κΈ° 포트λ₯Ό λ³€κ²½ν•˜λ©΄ 처음 μ—°κ²°ν•  λ•Œ "κ²½κ³ : 원격 호슀트 식별이 λ³€κ²½λ˜μ—ˆμŠ΅λ‹ˆλ‹€!" λ©”μ‹œμ§€κ°€ ν‘œμ‹œλ  κ²ƒμ΄λ―€λ‘œ ~/.ssh/known_hosts (ν΄λΌμ΄μ–ΈνŠΈ μΈ‘!) νŒŒμΌμ„ ν•΄λ‹Ή λ‚΄μš©μ— 맞게 νŽΈμ§‘ν•˜μ„Έμš”.

λŒ€μ•ˆμœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ ~/.ssh/config νŒŒμΌμ„ νŽΈμ§‘ν•˜μ—¬ "Host" 선언을 톡해 포트 2222둜 μ—°κ²°ν•˜κ±°λ‚˜, 항상 ssh -p 2222λ₯Ό μ‚¬μš©ν•˜μ—¬ λŠκΈ‹ν•˜κ³  λΉ„νš¨μœ¨μ μœΌλ‘œ μ‚¬μš©ν•˜μ„Έμš”.

이제 포트 22μ—μ„œ sshd (openssh)λ₯Ό μ‹€ν–‰ν•˜κ³ , ν•„μš”ν•œ 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ 포트 2222μ—μ„œ dropbearλ₯Ό μ‹€ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒ 단계, λ‹€μ‹œ λΆ€νŒ… ν›„ 변경사항 μœ μ§€ν•˜κΈ°

"openssh-server" νŒ¨ν‚€μ§€λŠ” μ‹œμž‘ 슀크립트λ₯Ό μ„€μΉ˜ν•˜λ―€λ‘œ κ±±μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

/jffs/scripts/shadow.postconfλΌλŠ” μ…Έ 슀크립트λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ μΆ”κ°€ν•˜κ³  μ‹€ν–‰ κ°€λŠ₯ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€:

#!/bin/sh
## "admin" 계정이 λ§Œλ£Œλ˜μ§€ μ•Šλ„λ‘ μ„€μ •
sed -i.bak.sshd '/^admin:/ s!:0:$!::!' /etc/shadow

/jffs/configs/passwd.addλ₯Ό μƒμ„±ν•˜κ±°λ‚˜ μΆ”κ°€ν•˜μ„Έμš”:

sshd:x:22:65534:OpenSSH Server:/opt/var/empty:/dev/null

μž¬λΆ€νŒ… ν›„ λͺ¨λ“  것을 ν…ŒμŠ€νŠΈν•˜κ³  두 번 ν™•μΈν•˜μ„Έμš”.#### 수읡

"μ‚¬μš©μž μ§€μ • ꡬ성 파일"에 λŒ€ν•œ μžμ„Έν•œ μ •λ³΄λŠ” μ—¬κΈ°μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€ - https://github.com/RMerl/asuswrt-merlin.ng/wiki/Custom-config-files

λͺ¨λ“  것이 μ›ν™œν•˜κ²Œ μž‘λ™ν–ˆλ‹€λ©΄, λΌμš°ν„°λ₯Ό λ‹€μ‹œ λΆ€νŒ…ν•  수 있으며 opensshλŠ” μ›ν•˜λŠ” ν¬νŠΈμ—μ„œ μˆ˜μ‹  λŒ€κΈ°ν•˜κ³ , ν•„μš”ν•œ 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ dropbearλŠ” λ‹€λ₯Έ ν¬νŠΈμ—μ„œ μˆ˜μ‹  λŒ€κΈ°ν•  κ²ƒμž…λ‹ˆλ‹€.

μ €λŠ” dropbear보닀 opensshκ°€ 훨씬 더 μ‹ λ’°μ„± 있고 μ•ˆμ •μ μ΄λΌλŠ” 것을 λ°œκ²¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.