Posts tagged server
SSH Public Key Authen พอกันทีกับการพิมพ์รหัสเข้า SSH
7ใครสงสัยว่ามันคืออะไร ลองไปอ่านที่นี่ดูนะครับ ถ้าให้เล่าแบบย่อๆก็เป็นการทำให้เรา ssh เข้าไปได้โดยไม่ต้องใส่รหัส จริงๆมันมีเรื่องความปลอดภัยด้วย ตามไปอ่านดูในลิ้งค์ที่ให้ไว้ละกัน มาพูดถึงวิธีสร้างคีย์แล้วเอาไปใส่ server กันดีกว่า
เอาบน Windows ก่อนนะครับ บน Linux ทำง่าย เดี๋ยวค่อยว่ากัน
เริ่มจาก ลง PuTTYgen ถ้าติดตั้ง PuTTY ไว้แล้วก็เรียกได้จาก Start > All Programs > PuTTY > PuTTYgen จะเห็นหน้าตาแบบนี้
ไม่ต้องคิดมาก กระแทกปุ่ม Generate ทันที แล้วเอาเมาส์วนๆในหน้าต่างสักพัก มันจะ random key มาให้ ใส่ comment ตามใจชอบแล้วกด Save private key ซะ อย่าลืมก้อปจดตัวอักษรยึกยือๆในช่อง Public key for pasting… ไว้ด้วยนะครับ
เปิดโปรแกรม PuTTY ไปที่ Connection > Data ใส่ Auto-login username เป็น username ที่เราจะใช้เข้า
ไปที่ Connection > SSH > Auth แล้วเลือก Private key ที่เราเซฟไว้เมื่อกี้
กลับไปหน้าแรก กรอก IP/Port สำหรับต่อให้เรียบร้อย เสร็จแล้วตั้งชื่อที่เราอยากตั้งในช่อง Saved Sessions แล้วกด Save
กด Open ก็จะเป็นการเข้า SSH ตามปกติ ตอนนี้ยังต้องใส่รหัสอยู่นะ
เสร็จแล้วสร้างโฟลเดอร์ .ssh (mkdir .ssh) แล้วเข้าไปสร้าง(หรือแก้)ไฟล์ .ssh/authorized_keys เสร็จแล้วเอา Public key for pasting … ที่ก้อปไว้ตอนแรกมาแปะลงไป บางทีอาจมีไฟล์นี้อยู่แล้วก็ช่างมัน ใส่ไปในบรรทัดต่อไปเลย
ออกมาแล้วลองเปิด PuTTY แล้วดับเบิลคลิกไอ้อันที่เราเซฟไว้เมื่อกี้ มันจะไม่ถามรหัสเราอีกแล้ว สังเกตจากบรรทัดที่ 2 จะมีบอกว่ากำลังใช้ Public key authen อยู่
ถ้าอยากให้ปลอดภัยกว่านี้หน่อย ก็ใช้ PuTTYgen ตั้งรหัส Private key ของเราซะ เวลา Login มันก็จะถามรหัสของ Key เวลาเปลี่ยนรหัสก็เปลี่ยนแค่ที่ Key ไม่ต้องมานั่งเปลี่ยน server ทุกเครื่อง
สำหรับวิธีบน Linux อันนี้ง่าย อธิบายได้ด้วยรูปเดียว
เคสนี้เราต้องการต่อจากเครื่อง Enceladus ไปยังเครื่อง Opteron (158.108.34.34) ลองดูรูปแล้วอ่านตามนะครับ
เริ่มจากเครื่องเรา สั่ง ssh-keygen กด enter รัวๆ แล้วสั่ง ssh-copy-id username@destination username กับ destination แก้ให้ถูกต้องด้วย มันจะถามรหัสทีนึง แค่นี้ก็เรียบร้อย
เสร็จแล้วลองทดสอบด้วยการต่อไปที่เครื่องนั้น มันก็จะไม่ถามรหัสเราอีกแล้ว
ป.ล. จริงๆมีอีกทางคือใช้ Pageant ที่อยู่ในชุดของ PuTTY ถ้าบน Linux ก็ใช้ ssh-agent ถ้าใครสนใจลองไปหาอ่านดูละกันครับ
E-Book สอน CentOS Server (ภาษาไทย)
3เป็นของพี่โสธรทำไว้ครับ แจกให้ดาวน์โหลดกันได้ฟรีๆ ผมอ่านแล้วเยี่ยมมากเลยครับ
คนที่สนใจสาย Server แนะนำว่าควรอ่านอย่างยิ่ง สาย Debian ก็อ่านได้ครับ มีหลายๆอย่างคล้ายกันอยู่
ไปโหลดกันได้ที่ http://linux.sothorn.org/node/558
pv: แอบดูสถานะข้อมูลที่ผ่าน pipe
2สมมุติว่าจะ backup sql
mysqldump -u root -p --all-databases | bzip2 > backup.sql.bz2
ถ้า database ใหญ่ๆ มันจะรันนานมาก โดยไม่มีอะไรบอกเลยว่ามันยังทำงานอยู่
ถ้าอยากรู้ล่ะ? pipeview ช่วยได้
aptitude install pv
แทรก pv เข้าไปตรงกลาง
mysqldump -u root -p --all-databases | pv | bzip2 > backup.sql.bz2
จะมีสถานะบอกว่ามีอะไรวิ่งผ่าน pipe บ้าง
38MB 0:00:27 [1.02MB/s] [ < => ]
เล่นกับ .htaccess
2จดไว้กันลืม ลอกมาจาก askapache.com
Require password for 1 file only
<Files login.php> Order deny,allow Deny from all AuthName "htaccess password prompt" AuthType Basic AuthUserFile /home/askapache.com/.htpasswd Require valid-user </Files>
Protect multiple files:
<FilesMatch "^(exec|env|doit|phpinfo|w)\.*$"> Order deny,allow Deny from all AuthName "htaccess password prompt" AuthUserFile /.htpasswd AuthType basic Require valid-user </FilesMatch>
Using the Apache Allow Directive in htaccess
network/netmask pair
Order deny,allow Deny from all Allow from 10.1.0.0/255.255.0.0
IP address
Order deny,allow Deny from all Allow from 10.1.2.3
More than 1 IP address
Order deny,allow Deny from all Allow from 192.168.1.104 192.168.1.205
Partial IP addresses, first 1 to 3 bytes of IP, for subnet restriction
Order deny,allow Deny from all Allow from 10.1 Allow from 10 172.20 192.168.2
network/nnn CIDR specification
Order deny,allow Deny from all Allow from 10.1.0.0/16
IPv6 addresses and subnets
Order deny,allow Deny from all Allow from 2001:db8::a00:20ff:fea7:ccea Allow from 2001:db8::a00:20ff:fea7:ccea/10
Deny subdomains
Order Allow,Deny Allow from apache.org Deny from wireshark.apache.org
Allow from IP without password prompt, and also allow from any address with password prompt
Order deny,allow Deny from all AuthName "htaccess password prompt" AuthUserFile /home/askapache.com/.htpasswd AuthType Basic Require valid-user Allow from 172.17.10.1 Satisfy Any
Skeleton .htaccess file to start with. Ultimate htaccess file sample
#
# DEFAULT SETTINGS
#
Options +ExecCGI -Indexes
DirectoryIndex index.php index.html index.htm
ErrorDocument 400 /cgi-bin/error.php
ErrorDocument 401 /cgi-bin/error.php
ErrorDocument 403 /cgi-bin/forbidden.cgi
ErrorDocument 404 /404.html
ErrorDocument 405 /cgi-bin/error.php
ErrorDocument 406 /cgi-bin/error.php
ErrorDocument 409 /cgi-bin/error.php
ErrorDocument 413 /cgi-bin/error.php
ErrorDocument 414 /cgi-bin/error.php
ErrorDocument 500 /cgi-bin/error.php
ErrorDocument 501 /cgi-bin/error.php
### DEFAULTS
ServerSignature Off
AddType video/x-flv .flv
AddType application/x-shockwave-flash .swf
AddType image/x-icon .ico
AddDefaultCharset UTF-8
AddLanguage en-US .html .htm .txt .xml .php
SetEnv TZ America/Indianapolis
SetEnv SERVER_ADMIN webmaster@askapache.com
### PHPINI-CGI
#AddHandler php-cgi .php
#Action php-cgi /cgi-bin/php5.cgi
### FAST-CGI
#AddHandler fastcgi-script .fcg .fcgi .fpl
#AddHandler php5-fastcgi .php
#Action php5-fastcgi /cgi-bin/fastcgi.fcgi
#
# HEADERS and CACHING
#
# 1 YEAR
<FilesMatch "\.(flv|ico|pdf)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
# 1 WEEK
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
# 3 HOUR
<FilesMatch "\.(txt|xml|js|css)$">
Header set Cache-Control "max-age=10800"
</FilesMatch>
# 1 MIN
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=0, private, no-store, no-cache, must-revalidate"
Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"NOI DSP COR NID CUR ADM DEV OUR BUS\""
Header set imagetoolbar "no"
</FilesMatch>
#
# REWRITES AND REDIRECTS
#
### SEO REDIRECTS
#Redirect 301 /ssl-ns.html /2006/htaccess/apache-ssl-in-htaccess-examples.html
#Redirect 301 /ht.tml
#Redirect 301 /index.html /
#RedirectMatch 301 /2006/htaccess-forum/(.*) /2006/htaccess/$1
#RedirectMatch 301 /(.*)rfc2616(.*) http://rfc.askapache.com/rfc2616/rfc2616.html
#RedirectMatch 301 /phpmanual(.*) /manual/en/$1
### REWRITES
RewriteEngine On
RewriteBase /
### WORDPRESS
#<IfModule mod_rewrite.c>
#RewriteEngine On
#RewriteBase /
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule . /index.php [L]
#</IfModule>
### REQUIRE WWW
#RewriteCond %{HTTP_HOST} !^www\.askapache\.com$ [NC]
#RewriteRule ^(.*)$ /$1 [R=301,L]
### STOP LOOP CODE
#RewriteCond %{ENV:REDIRECT_STATUS} 200
#RewriteRule ^.*$ - [L]
### REDIRECT BLOG FEED TO FEEDBURNER
#RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator|Recent) [NC]
#RewriteRule ^feed/?.*$ http://feeds.feedburner.com/apache/htaccess [L,R=302]
### BLOCK WGET
#RewriteCond %{HTTP_USER_AGENT} ^Wget.* [NC]
#RewriteRule .* /cgi-bin/forbidden.cgi [L]
#
# AUTHENTICATION
#
### BASIC PASSWORD PROTECTION
#AuthName "Prompt"
#AuthUserFile /home/askapache.com/.htpasswd
#AuthType basic
#Require valid-user
### UNDER CONSTRUCTION PROTECTION
#AuthName "Under Development"
#AuthUserFile /home/askapache.com/.htpasswd
#AuthType basic
#Require valid-user
#Order Deny,Allow
#Deny from all
#Allow from 23.23.23.1 w3.org googlebot.com google.com google-analytics.com
#Satisfy AnyLinux – ลบไฟล์เล็กๆจำนวนมหาศาล
0เรื่องมันมีอยู่ว่า Hosting ที่ดูแลอยู่โดน spam mail มหาศาลเข้าไป โฟลเดอร์ spool เลยเต็มไปด้วยเมล์ นับๆแล้วรวมกันได้ 530,367 ฉบับ แปลว่ามีไฟล์อยู่ 530,367 ไฟล์ แต่ละไฟล์ขนาดไม่เกิน 1 KB
ทีนี้ปัญหามันเกิดเมื่อต้องการลบโฟลเดอร์นี้ทิ้ง ทีนี้ partition แบบ ext3 มันจัดการไฟล์แบบนี้ได้ห่วยแตกมากๆ ลองลบด้วยหลายๆวิธีก็ไม่สำเร็จ
rm -rf dirname# ลองรันทิ้งไว้ชั่วโมงนึง (ไปกินข้าวมา) กลับมาเช็คจำนวนไฟล์ยังเท่าเดิมเป้ะfind dirname -delete# ลองรันทิ้งไว้ 5 นาที ผลคือจำนวนไฟล์เท่าเดิมเช่นเคย
นั่งงมๆอยู่นาน เลยลองถามไปใน twitter ได้ @sourcode มาร่วมปวดหัวด้วยกัน จนสุดท้ายลองเล่นกับ shell script แทน ได้ผลแฮะ
# ls -1 dirname > list # for i in `cat list`; do rm -f dirname/$i; done
ขอบคุณ bash อีกครั้ง อันที่จริงยังลบไม่เสร็จนะครับ ตอนนี้รันมา 15 นาที ไฟล์หายไป 100,000 กว่าๆแล้ว เหลืออีก 400,000 กว่าไฟล์เอง
ป.ล. @manatsawin ได้ส่งโค้ด python มาให้ลองเหมือนกัน พอดีผมลอง shell script อันบนแล้วสำเร็จซะก่อนเลยไม่ได้ลอง ยังไงก็ขอบคุณเช่นกันครับ
import glob,os; for i in glob.glob("*"): os.remove(i)
ดูแล้วสั้นกว่า bash เยอะเลย







